我发现,当我使用stack new the-project-name new-template
命令时,会在新目录中生成许多文件。我注意到以下4个特殊文件:
package.yaml
stack.yaml
Setup.hs
the-project-name.cabal
这4个文件似乎打算为软件包管理软件提供元数据,但它们看起来很混乱,我的意思是,为什么有4个,为什么不只是一个,它们之间的区别是什么? / p>
答案 0 :(得分:12)
这些配置文件有不同的用途。目前尚不清楚什么是更好的:拥有单一的全包配置文件或不同的构建工具和不同目标的不同文件。
此文件包含您的包的说明。比如,模块列表,库依赖项,编译器选项,项目元数据(作者姓名,包版本等)。此说明专门针对cabal
格式指定。
此配置文件由hpack
工具使用。它允许指定您在.cabal
文件中指定的相同内容。但是以YAML格式而不是自定义cabal
格式。此外,它还在cabal
上添加了一些功能。如果您现在不想深入hpack
,可以安全地删除package.yaml
文件。请注意,.cabal
文件由hpack
package.yaml
文件生成.cabal
文件,因此您不得编辑hpack
文件。重新使用stack
。
.proto
构建工具的配置。添加一些额外的配置参数。最重要的是:LTS解析器的名称。
用于添加一些构建挂钩。几乎在所有情况下,您也可以删除此文件。但我可以从我们的工作中为您提供此文件的真实使用示例。
我们正在编写服务,其中不同的节点应使用协议缓冲区格式进行通信。 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()
文件中进行了描述。