如何安装 system.random。也许是堆栈版本 8 中的 cabal 问题

How to install system.random. Maybe cabal issue in version 8 of stack

我正在使用堆栈 ghci 版本 8 开发 Ubuntu 16.04。我想在 Haskell 中导入 System.Random 但似乎我遇到了可能涉及 Cabal 的问题。我在这个网站上看到过类似的帖子,但他们通常说这是因为版本较旧,但我使用的是版本 8。

我收到错误:

Failed to load interface for ‘System.Random’
Use -v to see a list of the files searched for.

这告诉我 System.Random 有问题。上网查了一下,发现需要先安装Cabal

当我输入

Cabal --version

我明白了

cabal-install version 1.22.6.0
using version 1.22.5.0 of the Cabal library 

这告诉我我已经拥有它了。所以当我尝试使用

更新时
sudo apt-get install cabal-install cabal update

我明白了

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package cabal
E: Unable to locate package update

这很奇怪。如果我忽略它并尝试通过

随机安装
cabal install random

我明白了

Resolving dependencies...
All the requested packages are already installed:
random-1.1
Use --reinstall if you want to reinstall anyway.

看来我还有cabal的随机包。但是我无法使用

加载程序
import System.Random

命令。

编辑:看来我有 stack ghci 版本 8.0.1 和 ghci 版本 7.10.3。 System.random 在 ghci 中加载但不在堆栈 ghci 中加载。

当我尝试加载堆栈中的文件时,我也得到以下信息。进入

stack ghci R.hs

我明白了

Warning: Couldn't find a component for file target /home/aa/workspace/share/haskell/chenw/hw4/R.hs. Attempting to load anyway.
Configuring GHCi with the following packages: 
GHCi, version 8.0.1: http://www.haskell.org/ghc/  :? for help
Loaded GHCi configuration from /home/aa/.ghc/ghci.conf
Loaded GHCi configuration from /tmp/ghci19674/ghci-script

这是否意味着我安装的堆栈有问题?

如果您想使用 stack,并假设您有一个可用的 stack,则不必通过 apt-get.

安装任何东西

首先,更新您的 stack

stack update

确保您的包裹resolver version number正确

  • 如果你想全局使用堆栈,即stack ghci <source.hs>。检查 ~/.stack/global-project/stack.yaml
  • 如果您使用 stack 管理您的项目,即。 stack new <project>stack build。检查项目的 stack.yaml

全局(任何地方)使用stack

  • 通过 stack install random
  • 随机安装
  • 通过 stack ghci:load <source.hs>
  • 使用 GHCi
  • 通过 stack ghc <source.hs>
  • 编译源代码
  • 运行 你的程序 stack exec <executable_name>

您可以使用 --resolver=.

强制堆栈使用特定的解析器

示例:使用最新的 lts

$ stack --resolver=lts setup
$ stack --resolver=lts install random
$ stack --resolver=lts ghci

要在项目目录(stack.yaml存在)中使用stack,您不需要手动安装包;如果需要,stack 会在 stack build 时为您安装。但是你必须编辑 <project.cabal>

build-depends:       base >= 4.7 && < 5
                     , random