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存储库中看到使用示例: