data Zero = Zero
data Succ x = Succ x
class NatToPeano a b | a -> b where
toPean :: b
instance NatToPeano 0 Zero where toPean = Zero
instance (NatToPeano (x-1) a) => NatToPeano x (Succ a) where
toPean = Succ (toPean @(x-1))
这会产生错误:
Functional dependencies conflict between instance declarations:
instance NatToPeano 0 Zero -- Defined at parsejava.hs:26:10
instance NatToPeano (x - 1) a => NatToPeano x (Succ a)
-- Defined at parsejava.hs:28:10
26 | instance NatToPeano 0 Zero where