Haskell 从 YAML 文件读取嵌套时间戳

Haskell read nested timestamp from YAML file

我最近开始研究 Haskell,但似乎无法弄清楚这一点。

我正在尝试读取格式如下的 YAML 文件:

id: 1
kind: good
created_at: !ruby/object:ActiveSupport::TimeWithZone
    utc: &1 2017-01-01 10:34:12.533704000 Z
    zone: &2 !ruby/object:ActiveSupport::TimeZone
    time: *2

到目前为止,我可以通过这样做完美地读取 ID 和类型:

data Item= Item{
    id :: Integer,
    kind::String
    }

instance FromJSON Item where
    parseJSON(Object v) = Item <$>
        v .: "id" <*>
        v .: "kind"

我正在使用包 "Data.Yaml" 和这个功能:
let items = Data.Yaml.decode ymlData :: Maybe[Item]

但我似乎无法弄清楚如何获取时间戳。

获取时间戳的正确方法是什么,只需要 "utc"。

最简单的方法是创建一个 newtype 来实现 FromJSON

import Data.Time
import Data.Yaml

data Item = Item 
  { id :: Int
  , kind :: String
  , createdAt :: UTCTime
  } deriving (Show)

instance FromJSON Item where
  parseJSON (Object v) = 
    Item <$> v .: "id" <*> v .: "kind" <*> v .: "created_at"

newtype Time = Time String deriving (Show, Eq)

instance FromJSON Time where
  parseJSON (Object v) = Time <$> v .: "utc"

希望对您有所帮助。