Haskell 中无法识别的 HLINT 编译指示

Ren*_*soo 3 haskell hlint visual-studio-code haskell-stack

我正在尝试禁用 HLint 给我的一些警告。根据文档,我应该能够在我的文件顶部添加一个编译指示。所以我尝试了以下方法:

{-# HLINT ignore #-}
module Main where
Run Code Online (Sandbox Code Playgroud)

然而,这在运行时给了我一个错误stack build

/Users/nene/somedir/src/Main.hs:1:1: warning: [-Wunrecognised-pragmas]
    Unrecognised pragma
  |
1 | {-# HLINT ignore #-}
  | ^^^
Run Code Online (Sandbox Code Playgroud)

似乎 pragma 实际上在我的编辑器(带有“Haskell”扩展名的 VSCode)中有效,但在运行stack.

Tay*_*sak 5

如果你想在没有任何警告的情况下使用编译指示,你可以ANN像这样使用编译指示:

{-# ANN module "HLint: ignore" #-}
Run Code Online (Sandbox Code Playgroud)

但是,我建议使用常规注释而不是编译指示:

{- HLINT ignore -}
Run Code Online (Sandbox Code Playgroud)

我更喜欢常规注释,因为它们没有像 pragma 那样奇怪的规则。事实上,文档指出:

对于ANN编译指示,将它们放在任何导入语句之后很重要。如果您OverloadedStrings启用了扩展,则需要为注释提供显式类型,例如{-# ANN myFunction ("HLint: ignore" :: String) #-}. 该ANN编译指示还可以增加编译时间或造成比其他方式更需要重新编译,因为它们是由评估TemplateHaskell

对于{-# HLINT #-}编译指示,GHC 可能会发出有关无法识别的编译指示的警告,可以使用-Wno-unrecognised-pragmas.

  • @ReneSaarsoo:我认为作为初学者,您真正需要注意的唯一编译指示是“LANGUAGE”,它明确启用了语言功能。有时您还可能会看到“OPTIONS_GHC”用于指定额外的编译器选项。你可以忽略别人,直到你需要他们;它们控制更高级的优化、警告和类型系统功能。此外,编译指示名称不区分大小写,因此您可以根据需要编写“{-# Language BlockArguments #-}”。 (2认同)