Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 什么是package.yaml&;stack.yaml&;Setup.hs&;-project-name.cabal文件?_Haskell_Cabal_Haskell Stack - Fatal编程技术网

Haskell 什么是package.yaml&;stack.yaml&;Setup.hs&;-project-name.cabal文件?

Haskell 什么是package.yaml&;stack.yaml&;Setup.hs&;-project-name.cabal文件?,haskell,cabal,haskell-stack,Haskell,Cabal,Haskell Stack,我发现,当我使用stack new the project name new template命令时,许多文件被生成到一个新目录中。我注意到以下4个特殊文件: package.yaml stack.yaml Setup.hs the-project-name.cabal 这4个文件似乎打算为软件包管理软件提供元数据,但它们看起来很混乱,我的意思是,为什么有4个,为什么不只有一个,它们之间的区别是什么?这些配置文件有不同的用途。现在还不清楚什么更好:为不同的构建工具和不同的目标使用单一的全包配置

我发现,当我使用
stack new the project name new template
命令时,许多文件被生成到一个新目录中。我注意到以下4个特殊文件:

package.yaml
stack.yaml
Setup.hs
the-project-name.cabal

这4个文件似乎打算为软件包管理软件提供元数据,但它们看起来很混乱,我的意思是,为什么有4个,为什么不只有一个,它们之间的区别是什么?

这些配置文件有不同的用途。现在还不清楚什么更好:为不同的构建工具和不同的目标使用单一的全包配置文件或不同的文件

阴谋集团 此文件包含包的说明。例如,模块列表、库依赖项、编译器选项、项目元数据(作者姓名、包版本等)。本说明以
cabal
格式专用

包.yaml 此配置文件由工具使用。它允许指定与您在
.cabal
文件中指定的内容相同的内容。但使用YAML格式,而不是自定义
cabal
格式。此外,它在
阴谋集团
上添加了一些功能。如果您现在不想深入查看
hpack
,您可以安全地删除
package.yaml
文件。请注意,
.cabal
文件是由
hpack
package.yaml
文件生成的,因此如果使用
hpack
,则不得编辑
.cabal
文件

stack.yaml
stack
build工具的配置。添加一些额外的配置参数。最重要的:LTS解析程序的名称

Setup.hs 用于添加一些构建挂钩。在几乎所有情况下,您也可以删除此文件。但我可以从我们的工作中给出这个文件的实际使用示例


我们正在编写服务,其中不同的节点应该使用协议缓冲区格式进行通信。TL;DR是描述消息规范的非常好的格式。这些消息写在扩展名为
.proto
的文件中。但我们实际上想要使用Haskell类型。存在库
proto-lens
,它可以获取以协议缓冲区格式编写的文件,解析这些文件并生成包含表示这些消息的数据类型的Haskell模块。此文件生成应在项目编译之前完成。所以这个过程在
Setup.hs
文件中进行了描述。

回答得很好。stack.yaml vs package.yaml上还有一个额外的信息来源:@Shersh,您有更多关于
Setup.hs
用法的示例吗?我们也使用proto lens,这听起来是一种很好的使用方法,但我仍然不能100%确定您在该文件中放入了什么/它如何生成模块,等等@jkeuhlen您可以在这个GitHub存储库中看到使用示例: