COMPLETE pragma 不会阻止不完整模式警告

COMPLETE pragma doesn't prevent incomplete-patterns warning

我为类似列表的内容制作了两个模式视图 class。

infixr 5 :<
pattern (:<) :: Stream s => Token s -> s -> s
pattern b :< bs <- (uncons -> Just (b, bs))
  where b :< bs = cons b bs

pattern Nil :: Stream s => s
pattern Nil <- (uncons -> Nothing)
  where Nil = empty

uncons签名:uncons :: (Stream s) => s -> Maybe (Token s, s).

假设我也有使用这些模式的函数:

foo (b:<bs) = …
foo Nil = …

很明显,在这种情况下,模式匹配是详尽无遗的,我想说明这一点。

所以我尝试使用这样的 COMPLETE pragma{-# COMPLETE Nil, (:<) :: Stream #-}

那没有用,警告没有出现。为什么没有呢?是否可以如我所愿?

COMPLETE 编译指示只能附加到类型,不能附加到类型 classes。目前无法指定适用于给定 class.

所有类型的完整模式集