【发布时间】:2018-04-21 01:59:20
【问题描述】:
我没有使用 Haskell 的经验。我正在尝试使用aeson 将许多.json 文件解析为Haskell 中的数据结构。但是,由于我无法控制的原因,我需要将解析数据的文件名存储为我的数据中的字段之一。到目前为止,我所拥有的一个简单示例是:
data Observation = Observation { id :: Integer
, value :: Integer
, filename :: String}
instance FromJSON Observation where
parseJson (Object v) =
Observation <$> (read <$> v .: "id")
<*> v .: "value"
<*> ????
我的问题是:在解析可以访问文件名的 json 文件时,能够序列化我的数据的智能方法是什么?
我想到的是定义另一个data 像NotNamedObservation,初始化它,然后有一个转换NotNamedObservation -> String -> Observation(其中String 是文件名)的函数,但这听起来像一个非常糟糕的方法。
谢谢。
【问题讨论】:
-
我认为您定义一个表示“没有文件名的观察”的额外数据类型的想法非常好!
-
它可能看起来不太聪明,但我也认为你建议的解决方案是最好的。特别是如果它有签名
NotNamedObservation -> FilePath -> Observation,那么很明显发生了什么。