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

时间:2018-06-16 16:02:05

标签: haskell cabal haskell-stack

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

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

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

1 个答案:

答案 0 :(得分:12)

这些配置文件有不同的用途。目前尚不清楚什么是更好的:拥有单一的全包配置文件或不同的构建工具和不同目标的不同文件。

的项目-name.cabal

此文件包含您的包的说明。比如,模块列表,库依赖项,编译器选项,项目元数据(作者姓名,包版本等)。此说明专门针对cabal格式指定。

package.yaml

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

stack.yaml

.proto构建工具的配置。添加一些额外的配置参数。最重要的是:LTS解析器的名称。

Setup.hs

用于添加一些构建挂钩。几乎在所有情况下,您也可以删除此文件。但我可以从我们的工作中为您提供此文件的真实使用示例。

我们正在编写服务,其中不同的节点应使用协议缓冲区格式进行通信。 TL; DR用于描述消息规范的相当好的格式。这些消息写在扩展名为proto-lens的文件中。但我们实际上想要使用Haskell类型。存在库Setup.hs,它可以获取以协议缓冲区格式编写的文件,解析这些文件并生成包含表示这些消息的数据类型的Haskell模块。应在项目编译之前完成此文件生成。因此,此过程在import cv2 import numpy as np if __name__ == '__main__': # read image image = cv2.imread('image.png',cv2.IMREAD_UNCHANGED) # convert image to gray gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # ensure only black and white pixels exist ret,binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY) # morphology works with white forground binary = cv2.bitwise_not(binary) # get kernel for morphology kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3)) # number of iterations depends on the type of image you're providing binary = cv2.morphologyEx(binary, cv2.MORPH_CLOSE, kernel, iterations=3) # get black foreground binary = cv2.bitwise_not(binary) cv2.imshow('image', binary) cv2.waitKey(0) cv2.destroyAllWindows() 文件中进行了描述。