我为一个类似列表的类制作了两种模式视图。
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。
那是行不通的,警告没有发到任何地方。为什么不呢?可以做我想做的事吗?
答案 0 :(得分:4)
COMPLETE
编译指示只能附加到类型,不能附加到类型类。当前无法指定适用于给定类的所有类型的完整模式集。