我有这个非常简单的功能
import qualified Data.ByteString.Lazy as B
getJson :: IO B.ByteString
getJson = B.readFile jsonFile
readJFile :: IO (Maybe Response)
readJFile = parsing >>= (\d ->
case d of
Left err -> return Nothing
Right ps -> return (Just ps))
where parsing = fmap eitherDecode getJson :: IO (Either String Response)
我的硬盘驱动器上文件的路径在哪里jsonFile
(请原谅缺少 do-notation,但我发现使用起来更清楚)
我的问题是;有没有办法让我放弃这个IO
部分,这样我就可以单独使用字节串了?
我知道您可以对某些 monad 进行模式匹配,例如Either
并Maybe
获取它们的值,但是您可以用 做类似的事情IO
吗?
或者换一种说法:有没有办法让我在没有 IO 的情况下readJFile
返回?Maybe Response