Haskell学習中

変数への再代入が無い言語と聞いてHaskellを学習しています。
(ローカル変数にスタックを使わないのではないかという期待もあって)
で、ふつケル本こと、ふつうのHaskellプログラミングを読んでいます。
なんだか、あまりにも今までの言語と違っていて目をパチクリさせて興味深く読んでいます。


p68のリスト3.3のタブ文字を空白8文字に変換するコードでわからないところがあって
このまま先に進むのが気持ち悪いのでここに書いておきます。

main = do cs <= getContents
          putStr $ expand cs

expand :: String -> String
expand cs = concat $ map expandTab cs

expandTab :: Char -> String
expandTab c = if c == '\t' then "        " else [c]


うーん、変数csの型はStringなんだと思うんですが、
関数expandTabの引数の型がCharになっているのがどうにもわかりません><
ヘルプミー!!