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自制的monad变压器无法在GHCi中显示_Haskell_Ghci_Monad Transformers_Winghci - Fatal编程技术网

Haskell自制的monad变压器无法在GHCi中显示

Haskell自制的monad变压器无法在GHCi中显示,haskell,ghci,monad-transformers,winghci,Haskell,Ghci,Monad Transformers,Winghci,我正在尝试中介绍的简单的monad变压器 我的错误处理转换器具有类型 newtype ET m a = ET (m (Maybe a)) 我已经实现了所有必要的管道,我能够将它与identity monad(在我的小沙箱中称为I)结合起来,并编写/编译非平凡的函数 但我无法在屏幕上打印任何结果值。信息是: No instance for (Show (ET I Value)) arising from a use of ‘print’ 也许是进口的。I和Value派生都可以自己显示,没有问题

我正在尝试中介绍的简单的monad变压器

我的错误处理转换器具有类型

newtype ET m a = ET (m (Maybe a))
我已经实现了所有必要的管道,我能够将它与identity monad(在我的小沙箱中称为I)结合起来,并编写/编译非平凡的函数

但我无法在屏幕上打印任何结果值。信息是:

No instance for (Show (ET I Value)) arising from a use of ‘print’
也许是进口的。I和Value派生都可以自己显示,没有问题。这是与ET的混合不会显示。我认为有两种方式:

尝试在ET m a声明中插入派生显示,我尝试以多种方式获取许多不同的错误消息 按照一些web资源的建议,创建一个带有独立派生声明的可展示实例——到目前为止还没有成功尝试过。
如何在REPL中显示ET I值?

独立派生的目的之一是,有时编译器无法推断生成某个实例所需的约束,即使实际代码仍然是机械派生的。因此,您只需要知道要给它什么约束:

{-# LANGUAGE StandaloneDeriving, UndecidableInstances #-} 

newtype ET m a = ET (m (Maybe a))
deriving instance Show (m (Maybe a)) => Show (ET m a)

独立派生的目的之一是,有时编译器无法推断生成特定实例所需的约束,即使实际代码仍然是机械派生的。因此,您只需要知道要给它什么约束:

{-# LANGUAGE StandaloneDeriving, UndecidableInstances #-} 

newtype ET m a = ET (m (Maybe a))
deriving instance Show (m (Maybe a)) => Show (ET m a)

非常感谢。完美的为什么在这种情况下,派生行没有缩进?我认为它属于newtype声明。不是吗?不-独立派生引入了新的语法,派生实例,它甚至不需要与数据类型位于同一个模块中。这两行是独立的声明,谢谢。完美的为什么在这种情况下,派生行没有缩进?我认为它属于newtype声明。不是吗?不-独立派生引入了新的语法,派生实例,它甚至不需要与数据类型位于同一个模块中。这两行是独立的声明。