Subscribed unsubscribe Subscribe Subscribe

ふつうのHaskellプログラミング

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門


昨日やっと手に入ったので,LazyLinesの手前までちゃんと読んでみた.LazyLinesは本だけでは駄目で,コードを読まないといけない.

感想としては,よく使う関数やデータ構造,文法を割と丁寧に解説しているところと,遅延評価の流れをひとつひとつ追っているところが良いと思った.ただし,モナドはあまりにもざっと流しすぎで,うれしさがよくわからない.やっぱりモナドモナドのすべてが一番のドキュメントだろうと思う.

さらにLineParserのところはCleanで関数プログラミング 【第2部第5章】とかHaskellに書き直したParser Combinatorというもの(その2)を読むのがよいのではないかと思う.

あとは97ページのコラム「もっと簡潔に書きたい」のコード中にtypoを発見*1

誤: match pattern = any . (pattern `isPrefixOf`) . tails
正: match pattern = any (pattern `isPrefixOf`) . tails

したことと,9.6の練習問題は「型と型クラス」という意図からしてsortLinesをベタッと実装するのではなくて,LineをOrdのインスタンスにして以下のように実装する方がよいのではないかと思った.

data Line = Line { number :: Int
                 , string :: String
                 } deriving (Show,Eq)

instance Ord Line where
    compare x y = compare (number x) (number y)

myLines :: [Line]
myLines = [ Line 4 "4th line"
          , Line 1 "first line"
          , Line 5 "5th line"
          , Line 3 "3rd line"
          , Line 2 "second line"
          ]

こうすればData.List.sortをそのまま使えるので

> sort myLines
[ Line {number = 1, string = "first line"}
, Line {number = 2, string = "second line"}
, Line {number = 3, string = "3rd line"}
, Line {number = 4, string = "4th line"}
, Line {number = 5, string = "5th line"}
]

とても嬉しい*2

最後に,本当にどうでも良いことだけど,

  • 各章のタイトルページの表題の英字
  • 各ページ上部に書いてあるセクション名の英字
  • 文中の「・」で並べられたリスト中の英字
  • 練習問題の番号付けされたリスト中の英字

に使われているフォントがいいなぁと思った.このフォント何だろう.

*1:メールしておく.

*2:勝手に改行した.それにしてもHaskellのこの改行の仕方は気持ち悪い.