рекурсивные конструкторы, выдал следующий код:
data Node a = ConcreteValue | Node (Node a)
deriving Show
data Bintree a = Bintree (Node a)
someBintree = Bintree ((1, 2), (5, 7))
компилятор говорит следующее:
Couldn't match expected type ‘Node a’
with actual type ‘((a0, b0), (a1, b1))’
Вопросы:
1) Почему он описывает тип одинаковые 4 полиморфных типа разными сигнатурами: ((a0, b0), (a1, b1))
Разве не должно быть: ((a, a), (a, a))?
2) Почему следующая запись конструктора и его применения невалидна в описании типа:
Node Node a, если a уже сконструирован как Node, мне остается лишь пробросить дальше его в его же конструктор ? Т.Е я просто подставил пока заглушку в виде (Node a), чтобы компилятор не ругался.
Но чет никто не ответил на первый вопрос, почему он выдает такое описание ((a0, b0), (a1, b1))
Обсуждают сегодня