如何在haskell中为hie打开所有学究式模式?
是否可能以某种方式将--pedantic(如在堆栈构建中--pedantic)开关传递到Haskell ide引擎?我希望在编译时看到IDE中出现更多错误,因为我对该语言非常陌生,例如对于非穷举的案例模式如何在haskell中为hie打开所有学究式模式?,haskell,haskell-ide-engine,Haskell,Haskell Ide Engine,是否可能以某种方式将--pedantic(如在堆栈构建中--pedantic)开关传递到Haskell ide引擎?我希望在编译时看到IDE中出现更多错误,因为我对该语言非常陌生,例如对于非穷举的案例模式 除了这个bug,我在项目页面上找不到任何信息,但这似乎不能解决这个问题。据我所知,不可能将编译器或构建工具开关传递到HIE。HIE根据构建工具自动确定编译器标志,并且没有覆盖机制 相反,您应该将适当的编译器标志添加到生成文件中堆栈构建--pedantic传递-Wall和-Werror标志,因此
除了这个bug,我在项目页面上找不到任何信息,但这似乎不能解决这个问题。据我所知,不可能将编译器或构建工具开关传递到HIE。HIE根据构建工具自动确定编译器标志,并且没有覆盖机制 相反,您应该将适当的编译器标志添加到生成文件中<代码>堆栈构建--pedantic传递
-Wall
和-Werror
标志,因此这些是要添加到构建文件中的标志。这样一来,堆栈构建
和HIE将始终使用这些标志
包.yaml
如果您有一个package.yaml
文件(大多数堆栈项目的默认设置),则应将以下行添加到该文件的ghc options
部分:
- -Wall
- -Werror
例如:
name: project-name
version: 0.1.0.0
github: "githubuser/project-name"
license: BSD3
author: "Author name here"
maintainer: "example@example.com"
copyright: "2020 Author name here"
description: Example
dependencies:
- base >= 4.7 && < 5
ghc-options:
- -Wall
- -Werror
executables:
project-name-exe:
main: Main.hs
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
name: project-name
version: 0.1.0.0
-- synopsis:
-- description:
homepage: https://github.com/githubuser/project-name#readme
license: BSD3
license-file: LICENSE
author: Author name here
maintainer: example@example.com
copyright: 2020 Author name here
category: Web
build-type: Simple
cabal-version: >=1.10
extra-source-files: README.md
executable project-name
hs-source-dirs: src
main-is: Main.hs
default-language: Haskell2010
build-depends: base >= 4.7 && < 5
ghc-options:
-Wall
-Werror
例如:
name: project-name
version: 0.1.0.0
github: "githubuser/project-name"
license: BSD3
author: "Author name here"
maintainer: "example@example.com"
copyright: "2020 Author name here"
description: Example
dependencies:
- base >= 4.7 && < 5
ghc-options:
- -Wall
- -Werror
executables:
project-name-exe:
main: Main.hs
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
name: project-name
version: 0.1.0.0
-- synopsis:
-- description:
homepage: https://github.com/githubuser/project-name#readme
license: BSD3
license-file: LICENSE
author: Author name here
maintainer: example@example.com
copyright: 2020 Author name here
category: Web
build-type: Simple
cabal-version: >=1.10
extra-source-files: README.md
executable project-name
hs-source-dirs: src
main-is: Main.hs
default-language: Haskell2010
build-depends: base >= 4.7 && < 5
ghc-options:
-Wall
-Werror
有关更多详细信息,请参阅
在开发过程中,您可能希望从您的
包.yaml
或cabal文件中删除-Werror
。我只是从Haskell开始,我必须说我对这里的构建系统非常迷茫。我用stack new project name simple开始了我的项目,我得到了一个.cabal文件和一个stack.yaml文件,这两个文件内部都有依赖项。现在,我需要添加第三个项目,其中也列出了依赖项(除了您建议的之外)。为什么这里有这么多重叠?我真的需要哪些文件?我会给你一个关于这些东西来源的快速概述。希望它能有所帮助。一开始有一个叫做Cabal()的工具。这就是.cabal
文件的来源。Cabal从Hackage存储库()安装软件包。Hackage上的包经常有破坏性的更改。选择要安装的每个软件包的哪个版本时需要小心,以确保所有内容都兼容。Cabal尝试自动进行版本选择,但有时它会让程序员手动调整版本号,直到找到一个有效的组合。Stack()使用新的逻辑来选择和安装依赖项,从而扩展了Cabal。这就是Stack仍然有.cabal
文件的原因。它还添加了自己的stack.yaml
文件来控制依赖项的安装位置。其思想是stack.yaml
描述了一组相互兼容的精心策划的包。这样你就知道你得到了每个依赖项的正确版本(包括可传递依赖项),因为在策划的集合中每个包只有一个版本。至于package.yaml
,一些Haskeller不喜欢旧的.cabal
文件格式,所以他们创建了一个新的基于yaml的格式,称为Hpack()package.yaml
是一个Hpack文件。Stack已采用Hpack格式,并将其作为使用Stack new project name
创建的新项目的默认格式。如果您有一个package.yaml
文件,则Stack会根据需要从中自动生成一个.cabal
文件。一些Haskeller发现,package.yaml
值得复杂化,但是没有它你也可以做得很好。