light log

学んだこととか

Haskellデビューしてみた

動機

『すごいHaskellたのしく学ぼう!』を買ってHaskellを学び始めた。

JavaScriptで学ぶ関数型プログラミング』が面白くて、一度読み終えたあとそのまま二週目に突入して読んでいたんだけど、読み進めるうちに「本当の関数型プログラミング言語を学んでみたい」欲求がじわじわと膨れ上がってきて、ついに我慢できなくなった。

Haskellを選んだ理由は、なんかコードの見た目が好みだったから。シンプルで明瞭なように見えた。

まだあんまり読めてない&学べてないけど、環境構築と触りだけやったので、ブログ開設も兼ねて記録を残しておく。

環境構築

環境構築と言っても、MacでHomebrew使ってるので、コマンドを叩いただけ。

ググると、コンパイラであるGHC(対話環境も付いてくる)と、ライブラリ等が含まれるhaskell-platformをインストールするとよいとあったので、

$ sudo brew install ghc haskell-platform

としたけど、以下の通り怒られた。

Error: No available formula for haskell-platform
We no longer package haskell-platform. Consider installing ghc and cabal-install instead:
  brew install ghc cabal-install

なので、言われるがまま

$ sudo brew install ghc cabal-install

としたらうまくいった。20分くらいかかったと書いてある記事も目にした気がするけど、2分くらいで終わったと思う。

haskell-platformと、代わりに入れたcabal-installがそれぞれなんなのかまだちゃんと調べていないけど、今のところ問題なく動いている(まだ何も大したことしてないが)。

触り

『すごいHaskellたのしく学ぼう!』の1章、2章を対話環境のGHCiで写経しながら読んだ。

  • 1章:はじめの第一歩
  • 2章:型を信じろ!

以下いくつか気になったところだけ抜粋。

関数定義

数値を引数に取って2倍する関数は、以下のように書く。functionとか書かなくて良いのがらくちん。

doubleMe x = x + x

if式

Haskellでは全てが式であってifも式。式はなんらかの値を返さなきゃいけない。そのためif式ではthen節に加えてelse節も必須(省略不可)とのこと。

遅延評価

値が本当に必要になったときに初めて式が評価されるため、無限のリストが簡単に表せる。1から無限に続くリストから最初の100個を取得するコードが以下。美しい…。

> take 100 [1..]

リスト内包表記

pythonとかcoffee scriptにもあるやつ。50から100の数のうちで7で割った余りが3になる数のリストは以下のように書ける。

> [ x | x <- [50..100], x `mod` 7 == 3 ]

まだ2章を読んだところだけど、ものすごく大事っぽい。普段JavaScriptを書いているので、ここまで強く・静的に型を意識してプログラムを書くのは新鮮。新たな学びがたくさんありそう。

まとめ

なんか楽しい!

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!