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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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 如何让Haskero在非穷举模式匹配时发出警告_Haskell_Visual Studio Code_Intero_Haskero - Fatal编程技术网

Haskell 如何让Haskero在非穷举模式匹配时发出警告

Haskell 如何让Haskero在非穷举模式匹配时发出警告,haskell,visual-studio-code,intero,haskero,Haskell,Visual Studio Code,Intero,Haskero,我目前正在VisualStudio代码中评估作为Haskell编辑器的替代品,而不是Atom。到目前为止,Haskero似乎很有希望,但我错过了Atom Haskell通常给出的编译器警告 作为一个解释问题的方法,考虑一下这个简单的例子: 复制步骤 打开已安装Haskero的Visual Studio代码 添加新的Haskell文件:Repro.hs 将以下内容添加到文件中 按保存 文件内容: module Repro where foo :: Maybe a -> a foo (Jus

我目前正在VisualStudio代码中评估作为Haskell编辑器的替代品,而不是Atom。到目前为止,Haskero似乎很有希望,但我错过了Atom Haskell通常给出的编译器警告

作为一个解释问题的方法,考虑一下这个简单的例子:

复制步骤
  • 打开已安装Haskero的Visual Studio代码
  • 添加新的Haskell文件:
    Repro.hs
  • 将以下内容添加到文件中
  • 按保存
  • 文件内容:

    module Repro where
    
    foo :: Maybe a -> a
    foo (Just x) = x
    
    预期行为 编辑应就以下内容发出警告:

    Pattern match(es) are non-exhaustive
    In an equation for `foo': Patterns not matched: Nothing
    
    Atom Haskell就是这样做的

    实际行为 什么也没发生。“问题”视图仅指出:

    到目前为止,尚未在工作区中检测到任何问题

    更多细节 上面的复制步骤是我能想到的最简单的步骤,但是当我创建一个完整的堆栈项目并确保在项目目录的根目录中运行了
    Stack build intero
    时,我看到了相同的(缺少)行为

    我的环境是:

    • Windows 10 Pro x64
    • 堆栈版本1.6.3,Git版本b27e629b8c4ce369e3b8273f04db193b060000db(5454次提交)x86_64 hpack-0.20.0
    • Visual Studio代码版本1.20.0
    • Haskero版本1.3.1
    • Atom版本1.23.3 x64
    • 语言haskell版本1.17.3

    看起来您必须告诉Haskero将任何警告转化为致命错误(注意
    -Werror
    标志):


    然而,我真的不明白为什么我们要这么做,因为这是开箱即用的:

    stack ghci --with-ghc intero "--ghci-options=-Wall" --no-build --no-load
    

    这似乎是Haskero在VisualStudio代码中启动Intero的方式,在GHCi中,我可以看到警告,而无需传递-Werror


    出于好奇,我对hsdev和Sublime Haskell也做了同样的尝试,似乎是开箱即用:

    stack ghci --with-ghc intero "--ghci-options=-Wall" --no-build --no-load
    


    希望有帮助。

    是否启用了警告?我只是试着运行intero,我不得不打开他们来编辑阴谋集团的文件。我想
    stack.yaml
    OPTIONS
    pragma应该也能用。@chi在我的一个“真正的”堆栈项目中,我试过像这样编辑
    .cabal
    文件:
    ghc OPTIONS:
    threaded-rtsopts-with-rtsopts=-N-Wall
    (我添加了
    -Wall
    )。这肯定会导致
    stack build
    stack test
    显示所需的警告,但即使在重新启动后,Haskero也不会显示所需的警告…如果我正确回忆起几年前尝试Haskero时的情况,您需要单独安装Intero。如果我能记住正确的方法,那就该死了。如果你犯了错误(而不是警告),你会从Haskero那里得到错误吗?@BenjaminHodgson根据Haskero文档,你必须在项目文件夹中运行
    stack build intero
    ,我在我的“实际”项目中也这样做了(我只是没有包括上面的内容,因为复制这个问题似乎并不需要它)。如果我编写了无效代码,Haskero会立即报告。我建议您也要密切关注,特别是,如果这也无法立即实现,我会尝试使用0.3.1.2。我可以确认,将
    -Werror
    添加到我的选项中会按照此处描述的方式进行操作。我还没有尝试Sublime Haskell选项,因为我知道st承认我开始经历Haskell工具堆栈疲劳…与Haskell中的字符串插值相比,这算不了什么;)@MarkSeemann Haskero是否仍然存在问题,或者这些问题在以后的版本中已经修复?(看起来你现在像是哈斯克罗。)这些问题仍然存在。我不认为Haskero已经更新了一年多,但我也没有发现任何更好的作品。。。