すごいHaskell本
今日は45ページから。「パターンマッチとwhere」
p45
initials :: String -> String -> String initials firstname lastname = [f] ++ ". " ++ [l] ++ "." where (f:_) = firstname (l:_) = lastname
関数のパターンは網羅的なんだけど、whereでのパターンマッチでは空でないリストが
期待されているので、空文字列を渡すとExceptionが発生する。
*Main> initials "" "" "*** Exception: chap3.hs:82:11-27: Irrefutable pattern failed for pattern (f : _)
引数でパターンマッチすると、ちゃんとコンパイル時に警告を出してくれる。(-Wall使用)
initials :: String -> String -> String initials (f:_) (l:_) = [f] ++ ". " ++ [l] ++ "."
chap3.hs:81:1: Warning: Pattern match(es) are non-exhaustive In an equation for `initials': Patterns not matched: [] _ (_ : _) []
昨日の、constraintsが云々の警告の話。
第2回 スタートHaskell 感想 - 酔いどれコードを参考にし
て、-fno-warn-type-defaults オプションをつけたらとりあえず消えた。
あと、~/.ghci に
:set -O :set -Wall :set -fno-warn-type-defaults
というように書くと毎回オプションを付けてくれるそうな。Windows7でも、ホームディレク
トリに同じものを置いたら、ちゃんと読み込んでくれました。
……ここまでで1時間経過。色々調べてると1時間で1ページも進まないですねー。ま
あ、じっくりいきましょう。