ghci不会解释文件,但是阴谋集团成功了吗?

布雷特温斯

当我在ghci/中加载某个文件时cabal repl,出现以下错误消息:

No instance for (Control.Monad.Trans.Class.MonadTrans
                   (EitherT Error))
  arising from a use of ‘lift’

但是,EitherT a绝对是的一个实例MonadTrans它是包装的一部分。cabal build成功 也。出于某种原因(但对此感到满意),似乎ghci并且cabal repl不知道EitherT类型类实例(liftIO产生类似的错误cabal build)吗?

有人遇到过这样的事情吗?

提前致谢!:)

编辑:

是的; 大多数实例都丢失了:

λ :i EitherT
type role EitherT nominal representational nominal
newtype EitherT e (m :: * -> *) a
  = EitherT {runEitherT :: m (Either e a)}
    -- Defined in ‘Control.Monad.Trans.Either’
instance Eq (m (Either e a)) => Eq (EitherT e m a)
  -- Defined in ‘Control.Monad.Trans.Either’
instance Monad m => Monad (EitherT e m)
  -- Defined in ‘Control.Monad.Trans.Either’
instance Monad m => Functor (EitherT e m)
  -- Defined in ‘Control.Monad.Trans.Either’
instance Ord (m (Either e a)) => Ord (EitherT e m a)
  -- Defined in ‘Control.Monad.Trans.Either’
instance Read (m (Either e a)) => Read (EitherT e m a)
  -- Defined in ‘Control.Monad.Trans.Either’
instance Show (m (Either e a)) => Show (EitherT e m a)
  -- Defined in ‘Control.Monad.Trans.Either’
λ

但是,如果我跑cabal get either获得该包的源代码,并打开cabal repl,它确实拥有所有的实例。所以...呃...为什么当我导入软件包而不是加载源代码时,它们不知道那些实例?

编辑5:

好的,这很奇怪。运行ghci不是 cabal repleither-4.3.3.2源目录,然后运行:l src/Control/Monad/Trans/Either.hs产生缺失的类型类的实例错误的EitherT,即MonadTrans

λ :l src/Control/Monad/Trans/Either.hs
[1 of 1] Compiling Control.Monad.Trans.Either ( src/Control/Monad/Trans/Either.hs, interpreted )

src/Control/Monad/Trans/Either.hs:287:14:
    Could not deduce (transformers-0.3.0.0:Control.Monad.Trans.Class.MonadTrans
                        (EitherT e))
奥尔扬·约翰森(ØrjanJohansen)

我的猜测(仅从代码中看不到)是您安装了两个版本transformers:由GHCi直接加载的较新版本和由已安装either软件包使用的较旧版本或者可能通过间接依赖关系涉及更多的程序包。

然后,MonadTrans从一个混入另一个混在一起EitherT,对此一无所知。

cabal另一方面,请确保使用一个一致的版本。

要检查是否安装了两个版本,请使用

ghc-pkg list transformers

您可以给GHCi一个-package标志(或使用:set)来强制使用一个版本,尽管这只会影响加载的文件,而不影响已安装的软件包。

而且,cabal这些天似乎每个人都建议使用沙箱来避免此类问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

阴谋集团安装的模块将不会导入

阴谋集团的“世界”文件有什么用?

Haskell 阴谋集团对文件和模块名称感到困惑

阴谋集团的安装问题

mysql 用索引解释文件排序

如果阴谋集团或工作目录设置为项目目录,则Emacs Interactive-Haskell不会响应

阴谋集团安装HaskellForMaths失败

阴谋集团更新:下载失败

阴谋集团安装链接错误

使用ocamlbuild时生成Menhir的转储/解释文件

从文本文件解释文字HTML标记

如何用阴谋集团降级基地?

告诉阴谋集团主要模块在哪里

阴谋集团安装失败,出现“算术溢出”

阴谋集团找不到消息来源

Windows上的阴谋集团安装问题

如何在不解释文件的情况下使用文件内容更新列值?

加载神经网络时如何解释文件mean.binaryproto?

python可以解释文本文件中的列表吗?

想要使用文本注释文件中的现有数据以VOC格式创建xml注释文件。但是头脑中的文字无能为力

阴谋集团:如何在测试失败时停止构建?

如何从源头完全引导GHC和阴谋集团

阴谋集团更新在FreeBSD 10.2上导致分段错误

带有多个“图书馆”部分的阴谋集团

阴谋文件中的标志

Alamofire.download()方法:文件在哪里,成功保存了吗?

Python解释文档中的内容

iOS prepareForSegue成功传递了数据,但是viewdidload清除了吗?

我的iPhone上没有收到推送通知,但是Firebase Functions说它成功交付了吗?