首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskeline:为` `ReaderT r (StateT S m)`堆栈实现`MonadException`实例

Haskeline:为` `ReaderT r (StateT S m)`堆栈实现`MonadException`实例
EN

Stack Overflow用户
提问于 2013-08-20 05:40:44
回答 1查看 241关注 0票数 1

假设我有以下monad转换器堆栈(为简单起见,将rs保留为() ),

代码语言:javascript
复制
newtype MyMonad m a = MM (ReaderT () (StateT () m a)

如果我想使用它作为haskeline的InputT的基单体,我需要一个System.Console.Haskeline.MonadException实例。考虑到这些实例的apparent complexity,我更愿意让编译器用GeneralizedNewtypeDeriving为我派生它。具体地说,我希望下面的代码进行类型检查,

代码语言:javascript
复制
{-# LANGUAGE GeneralizedNewtypeDeriving, StandaloneDeriving, FlexibleContexts #-}

import Control.Monad.State
import Control.Monad.Reader
import Control.Monad.IO.Class
import Control.Applicative
import System.Console.Haskeline.MonadException

newtype MyMonad m a = MM (ReaderT () (StateT () m) a)
                    deriving (Functor, Applicative, Monad, MonadIO)
deriving instance (MonadException m) => MonadException (MyMonad m)        

但不幸的是,这给了我

代码语言:javascript
复制
/home/bgamari/hi.hs:11:1:
    Could not deduce (MonadException (StateT () m))
      arising from the superclasses of an instance declaration
    from the context (MonadIO (MyMonad m), MonadException m)
      bound by the instance declaration at /home/bgamari/hi.hs:11:1-66
    Possible fix:
      add an instance declaration for (MonadException (StateT () m))
    In the instance declaration for `MonadException (MyMonad m)'

查看为StateTReaderT提供的实例,

代码语言:javascript
复制
instance MonadException m => MonadException (ReaderT r m)
instance MonadException m => MonadException (StateT s m)

期望编译器推导出StateT实例似乎是完全合理的。我对巧妙的GeneralizedNewtypeDeriving期望太高了吗?如果不对其进行开放编码,如何实现此实例?

EN

回答 1

Stack Overflow用户

发布于 2013-08-20 06:05:13

有两个版本的State monad:strictlazyimport Control.Monad.State brings in the lazy version,但MonadException的实例似乎是针对严格版本的。

尝试使用import Control.Monad.State.Strict而不是import Control.Monad.State

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18323608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档