如何告诉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”的目录。对于小程序,我不想设置一个