了解Data.Aeson FromJSON类型类

时间:2015-04-20 18:41:46

标签: json haskell yaml ghc

我最近开始在我的一个项目中使用Data.Aeson。我最近也是Haskell的新手。所以我想弄清楚parseJSON类型类中FromJSON函数的实现是如何工作的。

所以我的代码库中有一段代码。

data MyProfile = MyProfile { name :: String, age :: Int } deriving Show

instance FromJSON MyProfile where
parseJSON (Object m) = MyProfile <$>
                       m .: "name" <*>
                       m .: "age"
parseJSON x          = fail ("not an object: " ++ show x)       

我想读的YAML文件也很简单。

profile:
    name: "Foo"
    age: 16

我正在努力了解该applicative functor的工作原理。我浏览了Data.Aeson模块,发现(。:)返回一个Parser(FromJSON a)。

所以我所理解的事实是,

  • 对象m包含yaml的profile:部分
  • MyProfile对应profile
  • name中的
  • ParseJSON正在尝试获取JSON对象中密钥的值m
  • age类似
  • 每个<*>都会返回Parser (FromJSON),然后将其应用到下一个<*>

我不理解的是,

  • MyProfile如何映射到profile部分?如果我的程序中有一个巨大的yaml文件和多个数据,该怎么办?
  • 在代码MyProfile <$> m .: "name"中,<$>的第一个参数不应该是函数吗?我认为<$>与fmap类似,因此第一个参数必须是一个函数(应用于第二个参数)。但MyProfile是一个数据!混乱!
  • 如何将yaml值(在本例中为Foo和16)添加到MyProfile数据中?

如果我的任何理解有误,请纠正我。

0 个答案:

没有答案
相关问题