Json 期望一个类型,但实际得到的可能是a0

Json 期望一个类型,但实际得到的可能是a0,json,haskell,types,aeson,Json,Haskell,Types,Aeson,我有一个函数,它使用Aeson从文件中的json对象获取数据。下面定义了数据和函数 data Data = Data { date :: String , temperature :: Int } deriving (Show, Read, Generic) data Temperatures = Temperatures { temperatures :: [Data]

我有一个函数,它使用Aeson从文件中的json对象获取数据。下面定义了数据和函数

data Data = Data { date :: String
                   , temperature :: Int
                    } deriving (Show, Read, Generic)

data Temperatures = Temperatures { temperatures :: [Data]
                                 } deriving (Show, Generic)

mooStuff :: IO Temperatures
mooStuff  = decode <$> getFile
    where
        getFile = B.readFile "Hello.txt"
但是,我得到一个类型错误:

test.hs:37:13:
    Couldn't match type ‘Maybe a0’ with ‘Temperatures’
    Expected type: B.ByteString -> Temperatures
      Actual type: B.ByteString -> Maybe a0
    In the first argument of ‘(<$>)’, namely ‘decode’
    In the expression: decode <$> getFile

我已经盯着这个看了好几个小时了,都没用。任何关于我哪里出错的想法都将不胜感激

出现错误的原因是解码并不总是成功。它的类型是

decode :: Data a => ByteString -> Maybe a
相应地,

(decode <$>) :: Data a => IO ByteString -> IO (Maybe a)
                          -- desired type, IO Temperatures, won't unify
或者,如果您对解码失败触发IO用户错误感到满意,只需

do Just t <- decode <$> getFile
   return t

不管怎样,都有一个代码没有解决的故障模式,这就是出现类型错误的原因。

错误的原因是解码并不总是成功。它的类型是

decode :: Data a => ByteString -> Maybe a
相应地,

(decode <$>) :: Data a => IO ByteString -> IO (Maybe a)
                          -- desired type, IO Temperatures, won't unify
或者,如果您对解码失败触发IO用户错误感到满意,只需

do Just t <- decode <$> getFile
   return t

无论如何,您的代码都无法解决一个故障模式,这就是显示为类型错误的原因。

确认了我的怀疑,同时提供了很好的响应,谢谢!确认我的怀疑,同时提供一个伟大的回应,谢谢!