Из Руководства по типизированному рэкету, чтобы определить тип объединения, просто используйте (define-type Some-Type (U Type1 Type2))
.
Чтобы определить полиморфные структуры данных, используйте что-то вроде (define-type (Opt a) (U ...))
.
Я хочу определить полиморфное бинарное дерево
(define-type (Tree a) (U (Leaf a) Node))
(struct (a) Leaf ([val : a]))
(struct Node ([left : Tree] [right : Tree]))
(define t1 (Leaf 5))
(define t2 (Leaf 8))
(define t3 (Node t1 t2))
Мне было интересно, почему тип t1 — Leaf
, а не Tree
, и как сделать так, чтобы он был Tree
?
> t1
- : (Leaf Positive-Byte)
#<Leaf>