Haskell入門
従来の言語では問題を部分化する方法について概念的な限界がいくつかある。関数型言語はこれらの限界を押し広げるも のである。 なぜ関数プログラミングは重要か
関数プログラミングを習得するには,これまで命令プログラミングで培った技術はいったん忘れ,真っ白な気持ちで臨む必要があります。関数型の山を登るためには,命令型の山を降りなければなりません。 第1章 関数プログラミングは難しくない!
- Haskellは理解すれば理解するほどきれいに書けることを約束してくれます。信頼してください
- 常にパターンを探しましょう。単純になるとき、またその時だけそれらを抽象化するのです
- 辛抱強く抽象化を正しく理解しましょう。もしそれが出来たならすべてのことが魔法のようにつじつまが合うようになるでしょう。
- 実装そのものが設計図となります … Haskell Maxims and Arrows
- なぜHaskellを学ぶと良いか
- Try Haskell - ブラウザ上でHaskellのコードを実行しなが学べる(以降のチュートリアルをWebで試す場合はRepl.itがオススメ)
- Haskell入門ハンズオン〜REPLで始めるHaskell生活〜 - REPLはHaskellの理解への近道
- ウォークスルー Haskell - 諸概念について簡潔にまとまっている
- Haskellらしさって?「型」と「関数」の基本を解説!【第二言語としてのHaskell】
- Make Mistakes to Learn Haskell - 失敗しながら学ぶHaskell入門
- Twitterを巡回していてわかったHaskell初心者が躓きやすいポイント8つ
- Haskell 超入門 - 長編だが丁寧に書いてあってわかりやすい
- Hikers Guide to Haskell - Haskellの歩き方
- Haskellの入門から中級者になるまでの指針 - Qiita
なぜHaskellを学ぶのか
日本語チュートリアル
- Haskell、または関数プログラミングの景色について - Qiita
- Haskell の難しさを分割し、理解していく
- なぜ Haskell が好きなのか - 趣味はデバッグ……
- こわくないHaskell入門 初級
- Haskell個人メモ
- 参照透過性とは何だったのか
- Rubyistに贈るHaskell入門
- 安定結婚問題を解きながらHaskellプログラミングを紹介しつつ恋愛について学ぶ
- Haskellでポーカーを作ろう〜第一回 リストのシャッフルとカードの定義〜
- Haskellプログラミングのコツのようなもの
- What I Wish I Knew When Learning Haskell
- Haskellチートシート(翻訳)
- プログラム・プロムナード/Haskellプログラミング
- やさしい Haskell 入門 (バージョン98)
- AtCoder に登録したら解くべき精選過去問 10 問を Haskell で解いてみた - Qiita
- Haskellにおける周辺概念をざっくり説明してみる (入門者向け) - Qiita
- » プログラム言語の歴史 <Haskell編>
- 「Haskell入門」を読んで - hioki-daichi’s blog
- Haskellを使おう (hiratara) - builderscon tokyo 2017 - YouTube
- Haskell社内勉強会とHaskell学習ツールの紹介 | IIJ Engineers Blog
- 【じゃんけん(っぽい)ゲームで入門】Haskell - Qiita
- とほほのHaskell入門 - とほほのWWW入門
講演資料
- すごいHaskell つくばで学ぼう!
- Haskell チュートリアル (Haskell Day 2016)
- 「Haskell入門ハンズオン!」事前資料 - 1/3 - Qiita
- 「Haskell入門ハンズオン #2」の当日用の資料(1) - Qiita
- Haskell入門ハンズオン! #3: 当日用資料 1/5 - Qiita
- Haskell入門ハンズオン! #5 - 当日用資料 (1/5) - Qiita
- Haskell入門ハンズオン! #5 - 当日用資料 (2/5) - Qiita
- Haskell入門ハンズオン! #5 - 当日用資料 (3/5) - Qiita
- Haskell入門ハンズオン! #5 - 当日用資料 (4/5) - Qiita
- Haskell入門ハンズオン #5 - 当日用資料 (5/5) - Qiita
- Haskell講習会スライド
書籍
- すごいH本が楽しかったのでまとめた - Qiita
- 拙書「Haskell 教養としての関数型プログラミング」の紹介 - Qiita
- これから Haskell を学ぶ人のための書籍紹介 - Qiita
- プログラミングHaskell第2版を翻訳しました - あどけない話
- プログラミングHaskell第2版の補足 - あどけない話
- Haskell 解説本 小史 - golden-luckyの日記
英語チュートリアル
- Writing Simple Haskell - 簡単なTODO管理ツールを作りながらHaskellで実用的なプログラムの書き方を学んでいくチュートリアル
- Tweag I/O - Why Haskell is important
- What is Good About Haskell? - Donnacha Oisín Kidney
- WhyHaskellMatters/README.md at master · thma/WhyHaskellMatters
- You are already smart enough to write Haskell | William Yao
- morgenthum.dev - software development and architecture
- Haskell Notes for Professionals book
- kowainik/learn4haskell: 👩🏫 👨🏫 Learn Haskell basics in 4 pull requests
- Reading Simple Haskell
- Keynote: Why Functional Programming Matters - John Hughes, Mary Sheeran (Lambda Days 2017) - YouTube
- Functional Programming in Haskell: Supercharge Your Coding
- 10 Reasons to Use Haskell
- To Kata Haskellen Evangelion
- A Type of Programming
- google/haskell-trainings: Haskell 101 and 102: slides and codelabs
- Haskell - Why Learn Haskell?
- Learning Real Haskell Incrementally
- Design Patterns in Haskell
- Haskell Design Patterns
- The category design pattern
- Ask-Elle: an adaptable programming tutor for Haskell giving automated feedback
- Haskell Tutorial - YouTube
- Functional Programming & Haskell - Computerphile
- Do you like Scala? Give Haskell a try!
- What Code Does vs What Code Means
- fptudelft/FP101x-Content-2015
- Free Programming Books#Haskell
- Happy Learn Haskell Tutorial
- Yet Another Haskell Tutorial
- Learning Haskell – 図が豊富でわかりやすい
- 🎥 Haskell Basics
- Introduction to functional programming with Haskell
- λm.me - Consider Haskell
- PLEAC-Haskell
- A community maintained course for learning Haskell
- teaching Haskell to a mathematician
- HaskVan/HaskellKoans
- Haskell is easy
- #198: Haskell Programming with Chris Allen and Julie Moronuki
- Yaxu (audio) + Rituals (visual) live @ babble after party, islington mill (future everything)
- byorgey/haskell-course
- Building a Better Custom Haskell Prelude
- Haskell Programming from first principles
- Bubble Pop!
- Happy Learn Haskell Tutorial (Setup)
- Happy Learn Haskell Tutorial Chapter 1: How to Learn Haskell
- Happy Learn Haskell Tutorial Chapter 2: Your First Step
- Pragmatic Haskell for Beginners, Lecture 1
- Pragmatic Haskell for Beginners, Lecture 2
- Real World Haskell
- Happy Learn Haskell Tutorial Volume 1
- In Haskell, less is more
- Anatomy of Programming Languages
- For Most Programmers, Learning Haskell Haskell Will Be No Panic…(… Unless They Read This Tutorial First!)
- Learn Haskell Fast and Hard
- The Haskell Road to Logic, Math and Programming
- Functional Programming in Haskell: Supercharge Your Coding
- hemanth/functional-programming-jargon
- CS240h lecture notes
- Using JavaScript to Learn Haskell
- Pitfalls in Haskell - Haskellに潜む罠
- Study “Haskell Programming from First Principles” in NYC
- Why Functional Programming Matters by John Hughes at Functional Conf 2016
- Learn Me a Haskell
- Professor Frisby’s Mostly Adequate Guide to Functional Programming
- Haskell Pitfalls
- The Joy of Haskell
- Some History of Functional Programming Languages - David Turner (Lambda Days 2017) - YouTube
- What pure functional programming is all about: Part 1
- Modern Software Development with Haskell by Runar Bjarnason - YouTube
- Learn you a Haskell - In a nutshell
- Haskell for all: Advice for Haskell beginners
- Haskell without the theory — Haskell without the theory 1.0 documentation
- Haskell for JavaScript programmers : programming
- argumatronic - The Nesting Instinct
- Demystifying Functional Programming — Building intuition by teaching through examples and design patterns/idiomatic solutions : haskell
- Learning Haskell - Miscellaneous Enlightenments
- uku - A Haskell CLI tool to display Ukulele fingering charts | Adrian Sieber’s Website
- Wise Man’s Haskell
- Practical Haskell programs from scratch
- Haskell for all: Detailed walkthrough for a beginner Haskell program
- Haskell for Readers
- To Kata Haskellen Evangelion
- thomashartmann.dev::Let’s read: Haskell Programming from First Principles, pt I
- thomashartmann.dev::Let’s read: Haskell Programming from First Principles, pt II
- jamesdbrock/learn-you-a-haskell-notebook
- not-a-blog/opinionated-haskell-guide-2019.md at master · theindigamer/not-a-blog
- The Haskell Phrasebook
- Perhaps Not The Answer You Were Expecting But You Asked For It
- Teaching Haskell with Duet
- tssm/up-to-date-real-world-haskell: I’m trying to update the Real World Haskell book
- The road to proficient Haskell | William Yao
- THINGS SOFTWARE ENGINEERS TRIP UP ON WHEN LEARNING HASKELL
- Applied Haskell Syllabus
- Monday Morning Haskell
- Haskell Tutorial and Cookbook
- Functional Programming in Haskell - Graham Hutton
- Haskell series part 1
- What the Industorial Coder Misses
- About this book - Learn Haskell by building a blog generator
- A Beginner’s Guide to Haskell
Examples
> fib = 0 : 1 : zipWith (+) fib (tail fib)
[0, 1, 1, 2, 3, 5, 8, 13, ...
フィボナッチ数列
* [Haskellのキモいフィボナッチ数列がやっと理解できたからこれでもかという程に細かく説明してみた #Haskell - Qiita](http://qiita.com/Tatsuki-I/items/97bdf8c2579b31b62fd8) * [Haskellでフィボナッチ数列 〜Haskellで非実用的なコードを書いて悦に入るのはやめろ〜 - Qiita](https://qiita.com/mod_poppo/items/4f78d135bb43b7fd1743) * [sketches/trouble-in-paradise-fibonacci at master · effectfully/sketches](https://github.com/effectfully/sketches/tree/master/trouble-in-paradise-fibonacci)primes = sieve [2..]
sieve (p:xs) = p : sieve [x | x <- xs, x `mod` p /= 0]
-- ghci> primes
-- [2,3,5,7,11,13,17,19,23,..
エラトステネスの篩
* [The Genuine Sieve of Eratosthenes](http://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf) * [Haskell programmers are liars](http://www.garrisonjensen.com/2015/05/13/haskell-programs-are-lies.html) * [The Genuine Sieve of Eratosthenes \| Patterns in Functional Programming](https://patternsinfp.wordpress.com/2021/05/10/the-genuine-sieve-of-eratosthenes/) * [[1811.09840] Three Euler's Sieves and a Fast Prime Generator (Functional Pearl)](https://arxiv.org/abs/1811.09840)let (m ~> str) x = str <$ guard (x `mod` m == 0)
in map (fromMaybe . show <*> 3 ~> "fizz" <> 5 ~> "buzz")
FizzBuzz
* <https://www.reddit.com/r/haskell/comments/2cum9p> * [Haskellで書かれたおもしろいFizzBuzz ― Haskellで読めないコードに遭遇した時に解読する方法を徹底解説!](http://itchyny.hatenablog.com/entry/2015/12/27/150000) * [Everyone needs a FizzBuzz](http://jeffreyrosenbluth.github.io/2017/02/05/fizzbuzz.html){-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Monoid
import Web.Spock.Safe
main :: IO ()
main = runSpock 8080 $ spockT id $ do
get root $ text "Hello World!"
get ("hello" <//> var) $ \name ->
text ("Hello " <> name <> "!")
Web Application
* [Spock](https://www.spock.li/)Exercise
- H-99: Ninety-Nine Haskell Problems
- CodinGame - プログラミングでゲームを攻略していく。Haskellにも対応している
- Project Euler - 数学とプログラミングを駆使しないと解けない問題が豊富。
- Solve Programming Questions | HackerRank