ふつうのHaskellプログラミング 第2章 2.1〜2.3 メモ

文字列を標準出力に出力

まずはプログラム掲載.
p25, hello.hs

main = putStrLn "Hello, World!"

左辺のmainが変数名で,右辺がその値.「main = …」は変数mainの定義.
で,このmainの値は関数ではなく,アクション.アクションはHaskellの値で,その値を評価すると入出力などが実行される.プログラムを開始すると,mainアクションの評価が始まる.
Haskellが値として何を持つのかよくわからないけど,とりあえずこの文章だけでわかる値をまとめると,

  • Haskellの値になりうるもの
    • 関数
    • アクション

ということになる.確証はないけど,型付けされるようなものは,値なんじゃないかな.
というか,僕がやってきたのと全然違うから意味不明.考えてみたら,僕がやってきたのはリストのちょこちょこした操作だけなので,急に「アクション」とか言われると,結構戸惑う.
そんなこと言ってても仕方がないので,進む.
右辺のputStrLnは関数で,引数が"Hello World!".この式を,「"Hello World!"にputStrLnを適用する」というんだそうだ.まぁ,聞けば意味はわかるので,覚える必要はないけど,一応メモ.あ,ちなみにputStrLnは文字列を標準出力に出力する.
さて,上のプログラムは,mainを「putStrLn "Hello World!"」と定義してるわけだから,実行すれば右辺が評価され,"Hello, World!"と出力される.そんだけ.当たり前ではあるけど,言葉とかがややこしい.

標準入力から文字列を入力

p29
cat.hs

main = do cs <- getContents
          putStr cs

Haskellで気をつけなくちゃいけないのは,csとputStrの先頭を揃えなくちゃいけないってこと.そろえなくちゃいけないから,タブ文字とか使うと見た目的には揃ってても,ちゃんとできなかったりするから注意.
で,なんで揃えなくちゃならないかというと,do式が複数の式を束ねる構文で,複数の式のインデントを揃えることによって,式が同じブロックに属していることを表現するから(そういう文法になっている).
こういうのを,レイアウトとかオフサイドルールとか言うらしい.
で,そのdo式は,アクションをまとめ,上から下に実行していくための式.
さて,

cs <- getContents

だけど,問題はこの「<-」.このへんな構文は,アクションの結果を得るときに使う.この場合は,getContentsで得た値をcsに結びつける.この変数と値を結びつけることを,「変数を値に束縛する」という.
またもや謎の用語がでてきたけど,あまり気にしないことにする.
このプログラムでは,遅延評価が行われてるらしい.