为什么 Haskell 解析评论?

Why is Haskell parsing comments?

我有一个非常简单的代码(在 GHC 8.10.4/stack ghci 17.12 中):

module T where

data D = A | B | C deriving (Eq, Show)

fn :: D -> Int
fn x =
  case x of
    A ->
      -- | Test
      1
    B -> 2
    C -> 3

问题是,无论我用 ^ 替换 | 还是使用多行注释,我都会得到这个错误:

T.hs:9:7: error: parse error on input ‘-- | Test’
  |
9 |       -- | Test
  |       ^^^^^^^^^

解析器是否将我的评论与其他内容不匹配?还是有一个看起来像注释的特殊语法?

评论以--开头。以-- |开头的注释是文档工具haddock的一种特殊注释,只允许出现在某些地方(而且你放的位置不是其中之一)。 GHC 实际上接受你的代码。您构建程序的方式很可能涉及黑线鳕的调用,它拒绝放错位置的 -- | 评论。

解决方案:使用 -- 表示普通注释,而不是 -- |,后者用于黑线鳕。

    -- Test