2
열거 자의 작동 방식을 파악하고 열거 자 라이브러리를 테스트하려고합니다. 내 데스크톱 컴퓨터에서 컴파일하는 스 니펫을 가지고 있지만 No instance for MonadIO
에 대해 불평합니다. 열거 자 라이브러리를 사용하는 방법에 관한 것입니까, 아니면 내 노트북과 어울리는 것입니까?하스켈 열거 자, 이상한 오류
iterateetests.hs:29:17:
No instance for (MonadIO (Iteratee Int IO))
arising from a use of `enumeratorFile' at iterateetests.hs:29:17-32
Possible fix:
add an instance declaration for (MonadIO (Iteratee Int IO))
In the first argument of `(==<<)', namely `enumeratorFile h'
In the first argument of `run_', namely
`(enumeratorFile h ==<< summer)'
In the expression: run_ (enumeratorFile h ==<< summer)
그리고
import Data.Enumerator
import qualified Data.Enumerator.List as EL
import System.IO
import Control.Exception.Base
import Control.Monad.Trans
summer :: (Monad m) => Iteratee Int m Int
summer = do
m <- EL.head
case m of
Nothing -> return 0
Just i -> do
rest <- summer
return (i+rest)
enumeratorFile h (Continue k) = do
e <- liftIO (hIsEOF h)
if e
then k EOF
else do
l <- liftIO $ hGetLine h
k (Chunks [read l]) >>== enumeratorFile h
enumeratorFile _ step = returnI step
main = do
bracket
(openFile "numberlist" ReadMode)
(hClose)
(\h -> run_ (enumeratorFile h ==<< summer))
+1하지만,'import Control.Monad.IO.Class'를 의미합니다. – antonakos
물론 그렇습니다. –
감사합니다. – Masse