我想要能够写作
x :: Eff (reader :: Reader Int, maybe :: Maybe) Int
x = do
config <- ask -- configuration from (Reader Int) monad
just config -- using (Maybe) Monad
runX :: Int
runX = runPure (runMaybe doIfNothing (runReader 6 x)) -- outputs: 6使用Eff Monad
使用Eff可以做到这一点吗
如果不使用Eff,我们如何才能使其正常工作
发布于 2017-04-13 03:22:16
您可以在Eff之上使用MaybeT和ReaderT monad转换器,但您不能以上面编写的方式匹配这两个转换器:
import Prelude
import Data.Maybe
import Control.Monad.Eff
import Control.Monad.Eff.Class
import Control.Monad.Eff.Console
import Control.Monad.Maybe.Trans
import Control.Monad.Reader.Trans
x :: ReaderT Int (MaybeT (Eff (console :: CONSOLE))) Int
x = do
liftEff (log "Asking...")
config <- ask
pure config
main :: Eff (console :: CONSOLE) (Maybe Int)
main = runMaybeT (runReaderT x 6)https://stackoverflow.com/questions/43344338
复制相似问题