对于这个使用Aeson的示例程序:
module Main where
import Data.Maybe
import Data.Aeson
import Data.Map as Map
import Data.Functor
import qualified Data.ByteString.Lazy as LBS
main = do
jsonContent <- LBS.readFile "templates/test.json"
print (decode jsonContent :: Maybe TemplateConfig)
newtype TemplateConfig = TemplateConfig (Map String String)
deriving Show
instance FromJSON TemplateConfig where
parseJSON val = TemplateConfig <$> parseJSON val
我抱怨错误的实例:
$ ghc test.hs
[1 of 1] Compiling Main ( test.hs, test.o )
test.hs:17:45:
No instance for (FromJSON (Map String String))
arising from a use of `parseJSON'
Possible fix:
add an instance declaration for (FromJSON (Map String String))
In the second argument of `(<$>)', namely `parseJSON val'
In the expression: TemplateConfig <$> parseJSON val
In an equation for `parseJSON':
parseJSON val = TemplateConfig <$> parseJSON val
我知道我需要一个FromJSON实例来解析JSON,并且Aeson中还包含许多常用的实例。根据{{3}},有一个实例FromJSON v => FromJSON (Map String v)
,我认为应该在这种情况下使用它。
我错过了什么?
答案 0 :(得分:1)
aeson since version 0.2中有FromJSON v => FromJSON (Map String v)
个实例,该实例于2011年2月发布。version 0.1中缺少此实例。所以我猜你已经安装了旧版本的aeson,它可能作为上限的依赖项被拉入。