使用PatternSynonyms
(显式双向形式),pattern-to-expr 方程实际上形成了一个函数,但拼写为大写(假设您最终得到一个正确类型的完全饱和的数据结构)。然后考虑(在 GHC 8.10.2)
{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
data Nat = Zero | Succ Nat deriving (Eq, Show, Read)
-- Pattern Synonyms as functions?
pattern Pred :: Nat -> Nat
pattern Pred n <- {- what goes here? -} where
Pred (Succ n) = n
pattern One = Succ Zero
zero = Pred One -- shows as Zero OK
那么我应该为pattern Pred n <- ???
价值模式顶线添加什么?或者我可以不使用Pred n
模式匹配吗?似乎有效(但我不明白为什么)是一种视图模式
pattern Pred n <- (Succ -> n) where ... -- seems to work, but why?
isZero (Pred One) = True
isZero _ = False
-- isZero (Pred One) ===> True ; isZero Zero ===> True
-- isZero (Succ One) ===> False; isZero One ===> False
Pred
在这里用作伪构造函数/模式看起来很不错,因为它是一个单射函数。