다음 하스켈 스니 피트는 컴파일되지 않으며 그 이유를 알 수 없습니다.하스켈 IO 모나드 및 노테이션
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에 의해 반환 된 문자열을 만드는 것입니다. –