blog.bouzuya.net

2016-02-11 すごい Haskell たのしく学ぼう ! の 5 章を写経した

すごい Haskell たのしく学ぼう ! の 5 章を写経した。

今週の目標には「すごい Haskell たのしく学ぼう ! の写経を終わらせる」ことがある。その達成のためだ。

今日は建国記念の日でお休みなので、それを利用して一気に進めようとした。しかし、今日一日で 5 章の 1 章分しか進まなかったので、全部で 15 章まであるすごい Haskell たのしく学ぼう ! を今週で終えられそうにない。

5 章は高階関数。「高階関数」・「カリー化」・「ラムダ式」・「 map 」・「 filter 」・「 foldl/r 」・「 $ 」・ 「関数合成 (.) 」 ・「ポイントフリースタイル」。

Haskell の関数の結合の規則や currying など C 系の Java / JavaScript とは随分と違っている。たとえば f g 1 は、 CoffeeScript では f(g(1)) だけど、 Haskell では ((f g) 1) になる。Java では error になりそうな f g も部分適用として扱われ、自動で currying されているので、次の引数を取る関数が返される。あとは $. を使って、括弧を減らし簡潔にできるあたりも良い。

個人的に記録しておきたい点は「 foldr で無限リストを扱える」こと。Haskell が遅延評価であるために次のような記述が動く。

ghci> let and' = foldr (&&) True
ghci> and' $ repeat False