Следующий снимок Haskell не будет компилироваться, и я не могу понять, почему.Haskell IO monad и сделайте обозначение
runCompiler :: TC -> IO()
runCompiler tc = let cp' = cp in
do
cp'
return()
where
cp = compileProg tc
Я получаю следующее сообщение об ошибке от GHCi:
Couldn't match expected type `IO a0' with actual type `String'
In a stmt of a 'do' block: cp'
In the expression:
do { cp';
return() }
In the expression:
let cp' = cp
in
do { cp';
return() }
Любые идеи, что нужно сделать, чтобы сделать его компиляции. Я не понимаю, почему он не примет() в качестве конечного значения.
Что такое подпись типа compileProg? – mhwombat
Почему вы связываете 'compileProg tc' как с' cp'', так и с 'cp'? И почему вы используете как 'let', так и' where' в одной и той же функции? Это сбивает с толку. –
Когда я меняю его на ответ ниже, он компилируется. Теперь моя проблема заключается в том, чтобы вывести строку, возвращаемую compileProg. –