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"
希望对您有所帮助。
我最近开始研究 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"
希望对您有所帮助。