我需要定义具有date
字段的数据类型并从json反序列化它。这是我的尝试。
data Some = Some { date :: Data.Time.Calendar.Day } deriving (Show, Generic)
instance FromJSON Day where
parseJSON (Object x) = parseTimeM True defaultTimeLocale "%F" <$> x .: (pack "date")
这是错误。
• Couldn't match type ‘m0 t0’ with ‘Day’
Expected type: aeson-1.2.3.0:Data.Aeson.Types.Internal.Parser Day
Actual type: aeson-1.2.3.0:Data.Aeson.Types.Internal.Parser
(m0 t0)
• In the expression:
parseTimeM True defaultTimeLocale "%F" <$> x .: (pack "date")
In an equation for ‘parseJSON’:
parseJSON (Object x)
= parseTimeM True defaultTimeLocale "%F" <$> x .: (pack "date")
In the instance declaration for ‘FromJSON Day’
我觉得很奇怪,我找不到任何带有暴露构造函数的数据类型来创建Date
个对象。而且我找不到从Date
String
的函数
答案 0 :(得分:3)
以供参考,一个完整的代码示例:
try
答案 1 :(得分:1)
parseTimeM
的类型为(Monad m, ParseTime t) => ... -> m t
,如果您专注于Day
,则为... -> m Day
,因此您需要链接monadic操作(使用m ~ Parser
)或以某种方式解开m
(例如,m ~ Maybe
)。
(x .: pack "date") >>= parseTimeM True defaultTimeLocale "%F"
此外,Day
已有一个实例,可解析YYYY-MM-DD
格式。