Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何在`Except e m a`do块中运行`m(或e a)`操作?_Haskell_Monad Transformers - Fatal编程技术网

Haskell 如何在`Except e m a`do块中运行`m(或e a)`操作?

Haskell 如何在`Except e m a`do块中运行`m(或e a)`操作?,haskell,monad-transformers,Haskell,Monad Transformers,第一次试用变压器(某种程度上),我尝试使用以下功能: getEnvList :: Text -> IO (Either String [Text]) 在 type EitherIO a = ExceptT String IO a script :: EitherIO () 我想我应该能够做到这一点: entryKeys :: [Text] <- pure $ getEnvList active_cac_entries entryKeys::[Text]这种情况下正确的函数是Ex

第一次试用变压器(某种程度上),我尝试使用以下功能:

getEnvList :: Text -> IO (Either String [Text])

type EitherIO a = ExceptT String IO a
script :: EitherIO ()
我想我应该能够做到这一点:

entryKeys :: [Text] <- pure $ getEnvList active_cac_entries

entryKeys::[Text]这种情况下正确的函数是
ExceptT
构造函数:

ExceptT :: m (Either e a) -> ExceptT e m a

-- do ...
--    entry <- ExceptT $ getEnvList active_cac_entries
--    ...
ExceptT::m(或ea)->ExceptT-ema
--做。。。

--条目啊,不知何故,我认为
pure
本质上是这个的别名,但我现在明白了为什么这是错误的想法:我想pure应该有类型:
a::->除了我是一个
@bbarker你可以写
(pure::())$getEnv…
并从错误消息中了解GHCI期望的
pure
而不是
()
@Redu不应该
而不是
()
,因为它是一个类型孔,所以它应该更友好一点?
ExceptT :: m (Either e a) -> ExceptT e m a

-- do ...
--    entry <- ExceptT $ getEnvList active_cac_entries
--    ...