Haskell에서 MongoDB를 사용하려고합니다. 나는 this tutorial을 시작점으로 사용하고있었습니다. 내가 전주곡에 이러한 명령을 수행 할 때, 나는 컬렉션의 목록을 얻을 : 나는 Yesod 처리기에 그것을 넣어하려고 할 때, 그러나MongoDB와 prelude와 yesod의 차이점
pipe <- runIOE $ connect $ Host "XXXXX.mongolab.com" $ PortNumber 33317
access pipe master <databaseName> $ auth <username> <password>
access pipe master <databaseName> allCollections
를,이 컴파일 아니에요. 내가 가지고있다
getActivityR :: Handler Import.Value
getActivityR = do
pipe <- runIOE $ connect $ Host "XXXXX.mongolab.com" $ PortNumber 33317
access pipe master <databaseName> $ auth <username> <password>
access pipe master <databaseName> allCollections
returnJson $ object ["activity" .= ("abc" :: Text)]
returnJson은 내가 그 방법을 완료했다는 것을 알리기 위해 정말로있다. 결국 그것은 활동 목록을 반환합니다.
내가지고있어 오류는 다음과 같습니다
Couldn't match type `IO' with `HandlerT App IO'
Expected type: HandlerT App IO Pipe
Actual type: IO Pipe
In a stmt of a 'do' block:
pipe <- runIOE
$ connect $ Host "XXXXXX.mongolab.com" $ PortNumber 33317
그래서 서곡/GHCi 내 Yesod 코드의 차이가 음모에 의해 무엇을 건설되고있다?
나는 Yesod에 대해 많이 모른다. 그러나 GHCi는'IO' 모나드에서이 명령을 실행한다. 반면에 당신의 Yesod 코드는'HandlerT App IO' 모나드에서 그것을 실행하고있다. 보십시오'pipe <- liftIO $ runIOE $ ...' – Fixnum
@ Fixnum의 코멘트는 실제로 대답이라고 생각합니다. –
@Fixnum 그게 그 오류를 수정하는 것 같았다. 감사. 대답으로 입력하면 받아 들여 몇 가지 사항을 알려줍니다 :) – taylonr