如何告诉haskell stack使用已安装的软件包?

如何告诉haskell stack使用已安装的软件包?,haskell,haskell-stack,Haskell,Haskell Stack,在通过stack build Extra安装Extra包之后,我已经能够使用Data.Tuple.Extra模块。但这不适用于Data.List.Unique模块()。据网站介绍,它包含在包Unique中。所以,我安装了它 $ stack build Unique 安装似乎成功了,因为我没有看到任何错误消息。但是 $ cat try.hs import Data.List.Unique main = do putStrLn "hello" $ stack runghc tr

在通过
stack build Extra
安装
Extra
包之后,我已经能够使用
Data.Tuple.Extra
模块。但这不适用于
Data.List.Unique
模块()。据网站介绍,它包含在包
Unique
中。所以,我安装了它

$ stack build Unique
安装似乎成功了,因为我没有看到任何错误消息。但是

$ cat try.hs
import Data.List.Unique
main = do putStrLn "hello"
$ stack runghc try.hs

try.hs:1:1: error:
    Could not find module ‘Data.List.Unique’
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
  |
1 | import Data.List.Unique
  | ^^^^^^^^^^^^^^^^^^^^^^^
$
堆栈runghc-vtry.hs的输出太大,我无法分析


注意:我修改了这个问题,将重点放在模块的安装和使用上。根据下面提供的答案,我能够使用一个选项运行程序。不过,如果不需要使用包选项,那就更好了。

stack build
不会在每次编译时全局“安装”包,而且
runghc
也无法获取堆栈包。这意味着或多或少直接执行GHC

如果使用
stack try.hs运行程序,可以指定要使用的包,如中所述。在这种情况下,您可以指定用于特殊格式注释的包,如下所示:

-- stack script --package Unique
import Data.List.Unique
main = do putStrLn "hello"

stack build
不会全局“安装”程序包以供每次编译使用,并且
runghc
无法获取堆栈程序包。这意味着或多或少直接执行GHC

如果使用
stack try.hs运行程序,可以指定要使用的包,如中所述。在这种情况下,您可以指定用于特殊格式注释的包,如下所示:

-- stack script --package Unique
import Data.List.Unique
main = do putStrLn "hello"
通过将
--package
选项传递给
runghc
,可以指定唯一的依赖项:

stack runghc --package Unique try.hs
或者,您可以使
try.hs
a,如所示

如果您打算开发<代码> Thest.hs/COM>多于一个独立的文件,请考虑设置堆栈项目。请参阅《堆栈用户指南》中的,以获取关于该操作的初始指导。

可以通过将
--package
选项传递到
runghc
来指定唯一依赖项:

stack runghc --package Unique try.hs
或者,您可以使
try.hs
a,如所示


如果您打算开发<代码> Thest.hs/COM>多于一个独立的文件,请考虑设置堆栈项目。有关这方面的初始指导,请参阅堆栈用户指南中的。

虽然
runghc
无法拾取堆栈包,
Stack runghc
也可以使用
--package
选项。很高兴知道。我找不到关于这个主题的任何文档(Stack docs只是说“它运行runghc”),所以我想我应该选择一个更安全、更稳定的选项。虽然
runghc
无法拾取堆栈包,
Stack runghc
也可以,也可以使用
--package
选项。很高兴知道。我找不到关于这个主题的任何文档(堆栈文档只是说“它运行runghc”),所以我想我应该选择一个更安全、更稳定的选项。谢谢!但是,我想知道为什么我不需要
Data.Sort
--package
选项。我确实需要安装
sort
软件包和
stack build sort
@Ryo,这很奇怪。在任何情况下,通常不需要显式安装库,例如
堆栈构建
。您只需告诉Stack您需要这个库(在本例中,通过
--package
选项),它将负责使它可用<代码>堆栈构建
主要用于构建项目,而不是其依赖项。谢谢!但是,我想知道为什么我不需要
Data.Sort
--package
选项。我确实需要安装
sort
软件包和
stack build sort
@Ryo,这很奇怪。在任何情况下,通常不需要显式安装库,例如
堆栈构建
。您只需告诉Stack您需要这个库(在本例中,通过
--package
选项),它将负责使它可用<代码>堆栈生成
主要用于生成项目,而不是其依赖项。在编辑时:如果为代码设置项目,则可以在项目配置文件中只指定一次
唯一
作为其依赖项,而不是每次运行它。@duplode我明白了。我所有的程序都很小而且是独立的,不值得称为“项目”。为每个小程序编写依赖项是过分的。这可能意味着我应该将包添加到
.stack/global project/stack.yaml
。那我就卡住了。你知道我应该看哪个文件吗?一个简单的“packages:\n-Unique”不起作用——stack试图找到一个名为“Unique”的目录。对于我不想为其设置适当项目的小程序,我通常会将它们全部放在一个“playway”目录中,在该目录中,我只为指定依赖项而设置了一个项目。另一种方法是使用Fyodor Soikin回答中建议的堆栈脚本格式指定每个文件中的依赖项。(对于全局项目,它在不同的级别上运行:它用于指定堆栈从何处获取依赖项的默认值,但不指定代码中哪些依赖项可用。)在编辑中:如果为代码设置项目,则只能将
Unique
指定为它的依赖项一次,在项目配置文件中,而不是每次要运行它时。@duplode我明白了。我所有的程序都很小而且是独立的,不值得称为“项目”。为每个小程序编写依赖项是过分的。这可能意味着我应该将包添加到
.stack/global project/stack.yaml
。那我就卡住了。你知道我应该看哪个文件吗?一个简单的“packages:\n-Unique”不起作用---stack试图找到一个名为“Unique”的目录。对于小程序,我不想设置一个