これは機能します:
c <- fmap lines (readFile "d:\\tmp\\h.txt")
let h = map (read :: String -> Int) c
これらの2行の「重ね合わせ」はコンパイルされません
fmap (read :: String -> Int) $ fmap lines (readFile "d:\\tmp\\h.txt")
エラーが発生します:
インタラクティブ:1:36: 予期されたタイプ`Char'と実際のタイプ`[Char]'を一致させることができませんでした 予想されるタイプ:文字列->文字列 実際のタイプ:文字列->[文字列] `fmap'の最初の引数、つまり` lines ' `($)'の2番目の引数、つまり `fmap行(readFile" d:\\ tmp \\ h.txt ")
なぜコンパイルされないのか、そしてこれを1行で行う方法は?私が欲しいのはPythonのシンプルさを実現することです
[int(i) for i in open("d:\\tmp\\h.txt")]