Haskellお勉強会第3日目まとめ


"Real World Haskell"の第3章の3節まで読み終えました。

Real World Haskell―実戦で学ぶ関数型言語プログラミング

Real World Haskell―実戦で学ぶ関数型言語プログラミング

Real World Haskell 第3章の読書メモ

  • 新しい型はdataで定義だ。data 型構成子 = 値構成子 みたいな感じだ。型構成子も値構成子も大文字始まりだかんな!
  • let はghciの中で変数束縛するのに使えるぞ!
  • 値構成子は型構成子を返す関数として見なせるぞ!
  • 型構成子と値構成子が同じ名前な事は許されているだけじゃなくて、良くある事だ!
  • 既存の型に新しい名前をつけるのはtypeを使おう!型シノニムと呼んでいるぞ! type 型シノニム名 = 型 だ!
  • 型シノニムを使うとコードが読みやすくなるぞ!それだけだ!新しい名前は新しい型ではないぞ!
  • 型シノニム情報を参照するのは:info で見てくれ!
  • 代数データ型は | で値構成子を区切る事によって選択肢みたいな感じで使えるぞ!
  • 代数データ型を作る時に | で区切るそれぞれの値構成子が違う型を持っていても問題ないぞ! data X = A Int | B String みたいなことが可能だ
  • タプルでも情報の組を作る事は可能だけど、その組に"意味"を与えるのは難しいんだ。つまり、(身長, 体重)も(X軸, Y軸)も(Double, Double)に変わりないが、Haskellは互いを区別できないんだ。これはバグを引き起こす可能性があるんだ。
  • derivingにeqを書いておくと同値比較するコードを生成するぞ!
  • 情報の意味が自明でない場合はdataを使おう!安全性と可読性の両方が手に入るぞ!

ここが気になる

  • 型構成子と値構成子は同じ名前じゃダメなの? -> 良いみたい
  • 値構成子はコンストラクタ的なもの?

なんか怒られた

data BookInfo = Book Int String [String]
                deriving(Show)

の"Show"を"show"と小文字で書いてemacsからghcに渡したら、

GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :cd ~/.cabal/
Prelude> :load "../Dropbox/haskell/RWH3.hs"
[1 of 1] Compiling Main             ( ../Dropbox/haskell/RWH3.hs, interpreted )
ghc: panic! (the 'impossible' happened)
  (GHC version 7.4.1 for i386-apple-darwin):
	nameModule show{tv a9K}

Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug

こんな感じで怒られました。よくあることなんでしょうか?