我正在使用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 repl
或stack ghci
,一种方法是在文件夹中创建本地GHC包环境,使用cabal install:
cabal install --lib --constraint="random == 1.1" --package-env . random
除";"随机";本身,您需要显式地列出您希望在环境中出现的其他包。同样,您可以添加多个--constraint
参数。
这将创建一个名为"的文件;。ghc.environment.xxx";在文件夹中,应该由在那里进行的独立ghci或ghc调用来获取。