Я определил типы для чисел Пеано
class Plus (n :: T) (m :: T) (r :: T) | r n -> m
instance Plus 'Zero m m
instance Plus n m r => Plus ('Succ n) m ('Succ r)
Теперь я обнаружил, что у меня есть два ограничения Plus a b c
и Plus c d e
.
Как определить операцию сложения на моемкласс такой, что компилятор может получить Plus a (b + d) e
?