これは機能します:
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")]