Ответ 1
Я думал, связав результат readFile с контентом, это будет String DataType, почему это не так?
В действительности String
не то, о чем компилятор жалуется. Посмотрите на код:
main = do
args <- getArgs
content <- readFile (args !! 0)
Теперь content
является, по желанию, простой String
. И тогда lines content
есть [String]
. Но вы используете монадическое связывание в следующей строке
linesOfFiles <- lines content
в блоке do IO ()
. Поэтому компилятор ожидает выражения типа IO something
в правой части <-
, но находит [String]
.
Так как вычисление lines content
не содержит никаких IO
, вы должны связать его результат с привязкой let
вместо монадического связывания,
let linesOfFiles = lines content
- это строка, в которой вы нуждаетесь.