如何“安装”本地(即它在我的硬盘上,而不是在互联网上).hs文件在多个程序中使用它?具体来说,如果我编辑库,那些编辑应该可用于所有程序,因此不能将库复制粘贴到每个程序的目录中。
要编译我的程序,我仍然想输入ghc main.hs,而不是文件路径页面。
从上面可能很明显,但我对cabal一无所知。
答案 0 :(得分:1)
确保安装了正确的Haskell平台,包括cabal
。或者,您可以使用stack
,它更现代,在许多方面更好,但IMO cabal
对于像您这样的简单项目更实用。
以下假设您使用{{1在典型的Linux机器上。
如果尚未完成,请根据具体情况为您的文件提供有意义的分层模块名称。例如,cabal
或module Video.Demuxing.FFMPEG
。我们假设您将其称为Data.List.Shuffle.Deterministic
。即该文件应以
Foo.Bar.Baz
将文件放在相应的文件夹结构中,即
如果尚未完成,请创建一个新的项目目录,例如
module Foo.Bar.Baz where
... -- start code
在该项目目录中创建一个子目录mkdir /home/Uꜱᴇʀɴᴀᴍᴇ/haskell/foobar
cd /home/Uꜱᴇʀɴᴀᴍᴇ/haskell/foobar
,其中包含一个目录Foo
,并将您的文件作为Bar
放入其中。
Baz.hs
将文件作为新cabal库的一部分。
mkdir -p Foo/Bar
cp WʜᴇʀᴇEᴠᴇʀ/Yᴏᴜʀ/Fɪʟᴇ/Wᴀꜱ/Bᴇꜰᴏʀᴇ.hs Foo/Bar/Baz.hs
这会问你几个问题,希望能明白选择什么。在大多数情况下,默认值都没问题,在这种情况下,只需按输入。
如果您还没有,请将所有内容放在版本控制下。 (如果你不知道这是什么,我建议你阅读一些Github教程。你可以跳过这一步,但越早习惯一些VCS,就越好。)
在本地安装您的项目。
cabal init
如果一切顺利,你可以在存储在计算机其他地方的Haskell文件中,只需
cabal install
并拥有您在该项目模块中定义的所有可用内容。编译时无需告诉GHC存储import Foo.Bar.Baz
的位置,此时已经注册了。您也可以在任何地方启动ghci并Foo.Bar.Baz
。