リスト処理の基本

countlineコマンド:標準入力の行数を数えるコマンド
例えば

./countline < cat.hs
2

これは以前作った

main = do cs <- getContents
          putStr cs

というプログラムが2行で書かれている事を示します。

$演算子:括弧とほぼ同定義で使用 メリットとしては括弧だけを使うと何段もネストしてしまってどの括弧がどの括弧に対応しているか分からないが$を使うと見やすく間違いが起こりにくい
lines関数:文字を行のリストに分割 

関数の使用例と返り値

lines "aaa\nbbb\nccc\n" →["aaa","bbb","ccc"]
lines "aaa\n"            →["aaa"]
lines "aaa"             →["aaa"]
lines "\n"              →[""]
lines ""                →[]
分割するときに改行文字は取り除かれます。

length関数:リストの長さ(要素の数)を返す どんな値のリストでもlength関数で長さを調べられる
特に文字列の長さを調べるのにもlength関数が使える事に注目
print関数:値を文字列化して標準出力に出力するアクションを返す

print関数使用例

Prelude >print 57
57
Prelude >print "string"
"string"
Prelude >print [1,2,3]
[1,2,3]

これらのことをまとめると

main =do cs <- getContents
         print $ length $ lines cs

この式はdo cs <- getContentsはcsというファイルをそのまま読み込んで
csファイルを行ごとのリストに分割して、返ってきたリストの長さ(行数)をそのまま出力する
というmainアクションを実行するんですね!

この辺でも分からない事だらけだったのに今ではかなり理解できているみたい♪
日々進歩++