完成编译指示不能防止出现不完整的模式警告

时间:2019-10-15 19:48:40

标签: haskell ghc

我为一个类似列表的类制作了两种模式视图。

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 Nil, (:<) :: Stream #-}这样的COMPLETE pragma

那是行不通的,警告没有发到任何地方。为什么不呢?可以做我想做的事吗?

1 个答案:

答案 0 :(得分:4)

COMPLETE编译指示只能附加到类型,不能附加到类型类。当前无法指定适用于给定类的所有类型的完整模式集。

相关问题