gpt4 book ai didi

haskell - 我如何在新堆栈项目中拆分 src/Lib.hs 和 app/Main.hs 之间的代码?

转载 作者:行者123 更新时间:2023-12-03 22:31:09 25 4
gpt4 key购买 nike

我在关注 stack guide我得到了一个新的项目设置(耶!)。

它生成了以下文件布局:

.
├── app
│   ├── Main.hs
├── .gitignore
├── LICENSE
├── helloworld.cabal
├── Setup.hs
├── src
│   └── Lib.hs
├── stack.yaml
└── test
└── Spec.hs

根据指南的“ Files in helloworld”部分:

The app/Main.hs, src/Lib.hs, and test/Spec.hs files are all Haskell source files that compose the actual functionality of our project (we won't dwell on them here).



我真希望他们能仔细考虑一下,因为我不知道 app/Main.hs 之间有什么区别。和 src/Lib.hs应该。我应该把哪个代码放在哪里?

我应该以什么方式在 app/ 之间划分代码? , src/ , app/Main.hssrc/Lib.hs ?

如果我只是编写一个应用程序或只是编写一个库,我需要两个文件/目录吗?

最佳答案

这种将模块分离到文件夹中的方式可以是您想要的任何方式。幼稚的想法是您将几乎所有逻辑都放入 Lib文件夹。 Main.hs那么就

  • Lib 进口所需零件,
  • 读取命令行参数和
  • 运行东西。

  • 您可以重命名 app进入 executables并更改 .cabal 中的相应行文件。实际上,您可以提出任意文件层次结构。
    在我们公司的项目中,我们使用另一种但也非常流行的方法。我们的文件层次结构如下所示:
    .
    |-- bench
    |-- src
    |-- exec1
    |-- Main.hs
    |-- exec2
    |-- Main.hs
    |-- SuperCoolLibrary
    |-- LibModule1.hs
    |-- LibModule2.hs
    |-- test
    |-- Setup.hs
    其他 stack.yaml , .cabal等文件未在此处显示。
    实际上,如果你正在编写一个应用程序,你可以创建一个 Main.hs文件并将所有逻辑放入 main功能。你不会相信,但作为一名 Haskell 讲师,我从我的学生那里看到了这样的代码 :(
    虽然我不建议你这样写代码。
    如果您正在编写库,则不需要 Main.hs文件和 main完全发挥作用。你可以看一个简单的例子,比如这个库(它允许你从数据类型自动生成命令行选项): optparse-generic
    我希望我能帮助您消除困惑。

    关于haskell - 我如何在新堆栈项目中拆分 src/Lib.hs 和 app/Main.hs 之间的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39069770/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com