我尝试使用\n Control.Monad.Extra.andM
\nimport Control.Monad.Extra (andM)\nRun Code Online (Sandbox Code Playgroud)\n但有一个错误:
\nCould not find module \xe2\x80\x98Control.Monad.Extra\xe2\x80\x99\nPerhaps you meant\n Control.Monad.Catch (needs flag -package-key exceptions-0.10.4)\n Control.Monad.Error (needs flag -package-key mtl-2.2.2)\n Control.Monad.Except (needs flag -package-key mtl-2.2.2)not found\nRun Code Online (Sandbox Code Playgroud)\n这个错误没有意义。
\n根据
\nhttps://cabal.readthedocs.io/en/3.6/installing-packages.html#installing-packages-from-hackage
\n\n\n3.2.1. 从 Hackage 安装软件包\nCabal 工具还可以一步下载、配置、构建和安装 Hackage 软件包及其所有依赖项。为此,请运行:
\n
$ cabal install [PACKAGE...]\nRun Code Online (Sandbox Code Playgroud)\n\n\n要浏览可用软件包的列表,请访问 Hackage 网站。
\n
这说的是“一步到位”,但根据我的经验,这太复杂了,实际上我不知道如何安装Control.Monad.Extra。
通常,当 Haskeller 想要安装这样的特定库/包时,你该怎么做?似乎没有足够的文件。
\n如何在 Haskell 中安装库?
你不知道。您应该只依赖它们,然后让 Cabal 担心可能需要完成的任何安装。即,正如你所写
转到 Hackage 页面并研究要使用哪个确切的库。
*.cabal文件->build-depends: extra >=1.7.10
这是关键的一步。您自己的 Cabal 文件既可以指定现在需要哪些库,也可以确保将来一切仍然有效。该文件需要指定您需要的包以及您自己定义的模块。
也许你实际上并不需要>=1.7.10,但是具体一点也不会有什么坏处。标准做法是在级别上添加下限和上限x.y,即您将使用extra >=1.7 && <1.8,然后在新版本出现时推动上限。可以说,这有点过于谨慎了。如果您只使用包中的一些简单工具,并且将来不太可能发生重大更改,那么将上边界排除在外可能会更方便。
$ cabal install extra
您已经指定了extra您的项目所需的内容,无需再次声明。相反,现在只需构建您自己的项目即可。
$ 阴谋集团构建或者,要获得模块的 GHCi 提示,
$ 阴谋集团回复或者,如果您有一个可执行文件,
main您希望执行$ 阴谋集团运行或者如果您想安装该可执行文件(并且只有那时)
$ 阴谋集团安装Cabal 然后会自动找出
extra-1.7.10应该首先安装的。
(在旧的 Cabal 中,仍然需要cabal install --dependencies-only先运行。)