Использование Data.Binary.decodeFile в обработчике Yesod - PullRequest
0 голосов
/ 22 ноября 2011

Я попытался скомпилировать следующее:

postRQuery :: Handler RepHtml
postRQuery = do
 properties <- liftIO $ decodeFile "store" :: IO (Map String ())
 defaultLayout [whamlet|Posted!|]

, но я получил следующую ошибку компилятора:

Couldn't match expected type `GGHandler
                              Bayith
                              Bayith
                              (Data.Enumerator.Iteratee
                               Data.ByteString.Internal.ByteString IO)
                              t0'
        with actual type `IO (Map String ())'
In a stmt of a 'do' expression:
    properties <- liftIO $ decodeFile "store" :: IO (Map String ())

Любые идеи о том, как я использую Data.Binary.decodeFile в Yesodобработчик?

Ответы [ 2 ]

6 голосов
/ 22 ноября 2011

Проблема здесь в приоритете.:: имеет более низкий приоритет, чем $, поэтому он анализируется как

properties <- (liftIO $ decodeFile "store") :: IO (Map String ())

, тогда как вы имели в виду

properties <- liftIO (decodeFile "store" :: IO (Map String ()))
1 голос
/ 28 ноября 2011

если вы используете ScopedTypeVariables, и вы должны, вы можете сделать это:

{-# LANGUAGE ScopedTypeVariables #-}
(properties :: Map String ()) <- liftIO $ decodeFile "store"

Но, похоже, вы просто храните ключи, почему вы не используете Data.Set.Set вместо Map

...