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
-- ...