Дополнение к числам Пеано на уровне типа
Я определил типы для чисел Пеано
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
?