我为类似列表的类制作了两个模式视图。
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 = …
很明显,在这种情况下,模式匹配是详尽的,我想指出这一点。
所以我尝试使用完整的编译指示 https://gitlab.haskell.org/ghc/ghc/wikis/pattern-synonyms/complete-sigs像那样:{-# COMPLETE Nil, (:<) :: Stream #-}
.
那不起作用,警告没有任何作用。为什么没有呢?可以做我想做的事吗?
COMPLETE
编译指示只能附加到类型,而不能附加到类型类。目前还没有办法指定适用于给定类的所有类型的完整模式集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)