从GHCi隐藏随机版本



我正在使用newsynth软件包,遇到了一个错误,我开始怀疑这个错误与夏季更新的random-1.2.0有关(newsynth上次更新是在2019年底,random-1.2.0是在6月份发布的。从那以后我一直运行cabal update,这就是为什么两者似乎都安装了。(以下是我在GHCi:中运行的代码

λ> import System.Random
λ> import Quantum.Synthesis.Ring
λ> import Quantum.Synthesis.Diophantine
λ> g <- getStdGen
λ> diophantine g (RootTwo 5 0)
<interactive>:5:1: error:
• No instance for (random-1.1:System.Random.RandomGen StdGen)
arising from a use of ‘diophantine’
There are instances for similar types:
instance random-1.1:System.Random.RandomGen
random-1.1:System.Random.StdGen
-- Defined in ‘random-1.1:System.Random’
• In the expression: diophantine g (RootTwo 5 0)
In an equation for ‘it’: it = diophantine g (RootTwo 5 0)

正如在另一篇SO帖子中向我建议的那样,我试图向GHCi隐藏random的另一份副本。我运行

$ ghc-pkg --global --package-db ~/.cabal/store/ghc-8.8.3/package.db list random
~/.ghcup/ghc/8.8.3/lib/ghc-8.8.3/package.conf.d
(no packages)
~/.cabal/store/ghc-8.8.3/package.db
random-1.1
random-1.2.0

所以我尝试了$ ghc-pkg --global --package-db ~/.cabal/store/ghc-8.8.3/package.db hide random-1.2.0。然而,当这个错误持续存在时,我也尝试了$ ghc-pkg --global --package-db ~/.cabal/store/ghc-8.8.3/package.db hide random-1.1(只是为了确保hide做了我认为会做的事情(,但莫名其妙地发现,在GHCi中(即使在重新启动终端之后(,尽管random的所有已知实例都被隐藏,我还是能够运行λ> import System.Random。我把包裹藏错地方了吗?

提前谢谢。


(前几天我问了一个有点相关的问题,但由于我认为这个问题有点不同,我认为分开是有意义的。如果不是这样,我可以更新另一篇文章。(

当您想要管理包时,请使用cabal或stack。但首先,重置为干净状态:

rm -rf ~/.ghc ~/.cabal
cabal update
cabal v2-repl -b newsynth

这将使您进入GHCi会话,并提供所需的包。

如果您想直接在ghci中工作,而不需要经过cabal replstack ghci,一种方法是在文件夹中创建本地GHC包环境,使用cabal install:

cabal install --lib --constraint="random == 1.1" --package-env .  random

除";"随机";本身,您需要显式地列出您希望在环境中出现的其他包。同样,您可以添加多个--constraint参数。

这将创建一个名为"的文件;。ghc.environment.xxx";在文件夹中,应该由在那里进行的独立ghci或ghc调用来获取。

相关内容

  • 没有找到相关文章

最新更新