ghci / stack和package可用

时间:2017-07-18 16:12:42

标签: haskell ghci

我使用intero和一些没有项目的文件,我的全局(或本地stack.yaml)是:

 ~/.stack/global
$ cat stack.yaml
flags: {}
packages: []
extra-deps: []

resolver: lts-8.21

如果我stack exec -- ghci:l Intero.hs包含Intero.hs

$ cat Intero.hs
module Intero where

import           Control.Lens.Lens

我明白了:

$ stack exec -- ghci
GHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help
Loaded GHCi configuration from /Users/nrolland/.emacs.d/.ghci
Prelude
λ> :l Intero.hs
[1 of 1] Compiling Intero           ( Intero.hs, interpreted )

Intero.hs:3:1: error:
    Failed to load interface for ‘Control.Lens.Lens’
    Use -v to see a list of the files searched for.
Failed, modules loaded: none.

我重新启动了-v:

$ stack exec -- ghci -v
GHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help
Glasgow Haskell Compiler, Version 8.0.2, stage 2 booted by GHC version 7.10.3
Using binary package database: /Users/nrolland/.stack/programs/x86_64-osx/ghc-8.0.2/lib/ghc-8.0.2/package.conf.d/package.cache
Using binary package database: /Users/nrolland/.stack/snapshots/x86_64-osx/lts-8.23/8.0.2/pkgdb/package.cache
Using binary package database: /Users/nrolland/Sync/clones/haskGist80/.stack-work/install/x86_64-osx/lts-8.23/8.0.2/pkgdb/package.cache
loading package database /Users/nrolland/.stack/programs/x86_64-osx/ghc-8.0.2/lib/ghc-8.0.2/package.conf.d
loading package database /Users/nrolland/.stack/snapshots/x86_64-osx/lts-8.23/8.0.2/pkgdb
loading package database /Users/nrolland/Sync/clones/haskGist80/.stack-work/install/x86_64-osx/lts-8.23/8.0.2/pkgdb
wired-in package ghc-prim mapped to ghc-prim-0.5.0.0

加载Intero.hs时,我得

Intero.hs:3:1: error:
    Failed to load interface for ‘Control.Lens.Lens’
    Locations searched:
      Control/Lens/Lens.hs
      Control/Lens/Lens.lhs
      Control/Lens/Lens.hsig
      Control/Lens/Lens.lhsig
Upsweep partially successful.
*** Deleting temp files:
Deleting:
Failed, modules loaded: none.
loading package database /Users/nrolland/.stack/programs/x86_64-osx/ghc-8.0.2/lib/ghc-8.0.2/package.conf.d
loading package database /Users/nrolland/.stack/snapshots/x86_64-osx/lts-8.23/8.0.2/pkgdb
loading package database /Users/nrolland/Sync/clones/haskGist80/.stack-work/install/x86_64-osx/lts-8.23/8.0.2/pkgdb
wired-in package ghc-prim mapped to ghc-prim-0.5.0.0
wired-in package integer-gmp mapped to integer-gmp-1.0.0.1
wired-in package base mapped to base-4.9.1.0
wired-in package rts mapped to rts-1.0
wired-in package template-haskell mapped to template-haskell-2.11.1.0
wired-in package ghc mapped to ghc-8.0.2
wired-in package dph-seq not found.
wired-in package dph-par not found.

但镜头是lts-8.23的一部分,虽然当我在ghc-pkg中查找时,我看不到它

$ stack exec -- ghc-pkg list
/Users/nrolland/.stack/programs/x86_64-osx/ghc-8.0.2/lib/ghc-8.0.2/package.conf.d
    Cabal-1.24.2.0
    array-0.5.1.1
    base-4.9.1.0
    binary-0.8.3.0
    bytestring-0.10.8.1
    containers-0.5.7.1
    deepseq-1.4.2.0
    directory-1.3.0.0
    filepath-1.4.1.1
    ghc-8.0.2
    ghc-boot-8.0.2
    ghc-boot-th-8.0.2
    ghc-prim-0.5.0.0
    ghci-8.0.2
    haskeline-0.7.3.0
    hoopl-3.10.2.1
    hpc-0.6.0.3
    integer-gmp-1.0.0.1
    pretty-1.1.3.3
    process-1.4.3.0
    rts-1.0
    template-haskell-2.11.1.0
    terminfo-0.4.0.2
    time-1.6.0.1
    transformers-0.5.2.0
    unix-2.7.2.1
    xhtml-3000.2.1
/Users/nrolland/.stack/snapshots/x86_64-osx/lts-8.23/8.0.2/pkgdb
    (no packages)
/Users/nrolland/Sync/clones/haskGist80/.stack-work/install/x86_64-osx/lts-8.23/8.0.2/pkgdb
    (no packages)

如何在不创建完整项目的情况下轻松加载模块? 这可能很容易,但我对这件事情如何运作感到非常困惑。

1 个答案:

答案 0 :(得分:1)

必须先安装(下载和编译)软件包才能使用它们:

stack install lens

如果您正在使用Cabalized项目(即使对于小东西也是一个好主意),堆栈将安装您的cabal文件中列出的依赖项,因此您不必手动安装它们。

回应你的评论:我认为技术上可以下载并安装所有(某些版本的)stackage,但这似乎不太可取。这将花费相当长的时间,并且在需要时安装包装几乎没有任何好处。此外,我不知道这是一种自动化的方式。我知道在“离线hackage”存储方面已经做了一些有趣的工作,但它还没有准备好使用。

相关问题