Haskell 如何使带有日期字段的类型从json反序列化

Haskell 如何使带有日期字段的类型从json反序列化,haskell,aeson,Haskell,Aeson,我需要定义包含日期字段的数据类型,并从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") 这里有一些错误 •

我需要定义包含日期字段的数据类型,并从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’
我发现很奇怪,我找不到任何具有用于创建日期对象的公开构造函数的数据类型。我找不到从字符串解析日期的函数,parseTimeM的类型是Monad m,ParseTime t=>…->m t,如果你在白天专门研究它,它是…->m天,所以你需要用m~解析器链接一元动作,或者以某种方式打开m,例如,m~可能

另外,Day已经有一个实例,解析YYYY-MM-DD格式。

parseTimeM的类型为Monad m,ParseTime t=>…->m t,如果你在白天专门研究它,它是…->m天,所以你需要用m~解析器链接一元动作,或者以某种方式打开m,例如,m~可能


另外,Day已经有一个实例,解析YYYY-MM-DD格式。

并提供一个完整的代码示例供参考:

{-# LANGUAGE OverloadedStrings #-}
module Datetimetest where

import Data.Time.Format
import Data.Time.Calendar
import Data.Aeson
import Data.Text
import Data.Maybe

newtype Some = Some { date :: Day } deriving Show

instance FromJSON Some where
  parseJSON (Object x) = (x .: pack "date") >>= \v -> Some <$> parseTimeM True defaultTimeLocale "%F" v

test :: Some
test = fromJust $ (decode "{\"date\":\"1999-12-01\"}" :: Maybe Some)

并提供一个完整的工作代码示例供参考:

{-# LANGUAGE OverloadedStrings #-}
module Datetimetest where

import Data.Time.Format
import Data.Time.Calendar
import Data.Aeson
import Data.Text
import Data.Maybe

newtype Some = Some { date :: Day } deriving Show

instance FromJSON Some where
  parseJSON (Object x) = (x .: pack "date") >>= \v -> Some <$> parseTimeM True defaultTimeLocale "%F" v

test :: Some
test = fromJust $ (decode "{\"date\":\"1999-12-01\"}" :: Maybe Some)

你说的是哪种日期?这是假设的日期。正如我所说,我找不到任何包含它的包。parseTimeM中缺少什么?你说的是什么日期类型?这是假设的日期。正如我所说,我找不到任何包含它的包。parseTimeM中缺少什么?你在说什么实例?你在说什么实例?