読者です 読者をやめる 読者になる 読者になる

Haskell入門した

Haskell入門を読んで以来しばらく放置していたのだが少しだけ実際に手を動かして入門してみた。

以下感想やメモ

  • インストールはapt-get install haskell-platform haskell-platform-docで
  • ghcのマニュアルがあればなんとかなると思っていたがやっぱり最初は無理
  • サンプルコードをいくつか読んだり書いてみたりする
  • 型さえ合っていればまあなんかコンパイルできてなんとなく動く
  • 型を合わせるのが難しいんだけどね...
  • コンパイラの使い方はccに割と似てるのでそんなに困らない
  • ghc --make hoge.hs でhoge.hsがmainを持っていればまあなんとなくできる
    • ファイル分割したときでも、importから勝手にコンパイラが解決してくれる
  • type notationは書いておくと自分の助けにもなる
  • モナドは全く理解してないけどdo記法に押し込んで型を合わせておけばなんとなく動く
  • 試行錯誤はあったものの、150行ほど書いてバグは2つほど
    • さようならSegmentation Fault、さようならぬるぽ
  • @keigoiさんに教えてもらったliftMが便利
    • liftMとかfoldMとかそういうこわいものをなんとなく使えた(これも型のおかげか
  • CamelCaseはやっぱり馴染めないのでなんとなく避けている
  • 関数型に入ってきた順番が Erlang >>= OCaml >>= Haskell なので割とすんなりピュアな世界に入れたかな
  • mapやfold_left、ファンクタは予め理解して書けるようになっておいた方が速い
    • OCamlErlangで練習できてたので速かった
    • いきなりHaskellだと、モナドになっているなっていないでhogeMとhogeを使い分けなければならずちょっと辛い
    • 副作用(モナド?)のないコードは書いててそんなに面白くない
  • 高度に熟練した達人は末尾再帰関数を書かなくなるが、素人のうちは別に頑張る必要はない
    • 自分が分かりやすいようにベタに書かないと、liftMやfoldMと混じっていると尚更理解が遅れる
    • 高度に熟練すると...まるで山月記みたいですね
    • 高度に熟練したErlang/OTP職人は ! を書かなくなるのと同じですね
  • やはりプログラミング初心者にHaskellは勧められない
    • コンパイルを通すまでが難しいので途中で挫折されそう(頭イイ人は別)
    • 初心者はPythonなどで一刻も早く「動く!俺スゲー!」感を味わうべき
    • アセンブラやCなんかと全く計算モデルが異なるので(チューリング計算vsラムダ計算)、ハードウェアレベル方面、実用的な方面からコンピュータの知識を学んできた人、SICPをすっ飛ばした人、僕などには少し敷居が高い
    • OCamlもそうだけど、コンパイラがどういう作りになっているのか全く想像がつかない
  • そこそこ敷居が高いが、それを乗り越えるとType Safeな素晴らしい世界が待っていると思います

今後の課題

  • Windowsでも試してみる
  • cabalを使えるようになったり、cabal的に作れるようにする
  • システムコールまわり
  • Yesodをなんとなく理解しておく
  • デバッガ?いらないよね?
  • 遅延評価の恐ろしさをどこかで味わう
  • ところでGCどうなの?
    • メモ化しすぎてメモリ肥大とかしないよね?
  • OMakefileを書く(えっ

参考文献

ネット上の文献はまあいろいろあるので適当にググってください。「ふつうのHaskell」はあんまり参考にならなかったかな。

入門Haskell―はじめて学ぶ関数型言語

入門Haskell―はじめて学ぶ関数型言語


記号と再帰―記号論の形式・プログラムの必然

記号と再帰―記号論の形式・プログラムの必然


Xenoblade ゼノブレイド 特典 サントラCD付き

Xenoblade ゼノブレイド 特典 サントラCD付き