完整的编译指示不会阻止模式不完整的警告

问题描述 投票:0回答:1

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

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 #-}

这没用,警告没有到位。为什么不呢?是否可以做我想做的事?

haskell ghc
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.