模式同义词方向性

时间:2017-01-07 23:03:56

标签: haskell

这两种类型是同构的,但只有ZeroF单向类型同义词略有限制,对此我不确定是否有出路。

data NatF x  = NatF { unNatF :: (forall u. Either u x) }
pattern ZeroF  <- NatF (Left _)
pattern SuccF n = NatF (Right n)

data PeanoF x =  ZeroFP | SuccFP x  -- isomorphe

我做错了什么(除了人为的例子......)?

1 个答案:

答案 0 :(得分:4)

你遇到了麻烦,因为你的假设是错误的。 forall u. Either u xPeanoF x不同构。后者与Either () x(或仅Maybe x)同构;前者与x同构。

newtype NatF x = NatF (Maybe x)
pattern ZeroF = NatF Nothing
pattern SuccF n = NatF (Just n)