Seb*_*ner 5 haskell monad-transformers
我在IO的monad变换器中,我想为Failure定义我自己的实例.
因为Failure已经为IO和MonadTrans定义了实例,所以我甚至无法构建自己的重叠实例.
据我所知,我还有四个选择:
你还知道其他选择吗?你怎么看?
一个newtype包装是标准的做法,以这样的问题.的GeneralizedNewtypeDeriving扩展使得任选导出从包裹单子实例轻而易举.
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-- | Your custom monad transformer
newtype YourMonadT e m r =
YourMonadT (EitherT e m r)
-- Easily derive the instances using the GeneralizedNewtypeDeriving
deriving (Functor, Applicative, Monad, MonadIO)
instance Failure e (YourMonadT e m) where
failure = error "TODO: implement me however you want"
Run Code Online (Sandbox Code Playgroud)