21 lines
471 B
Racket
21 lines
471 B
Racket
#lang typed/racket
|
|
|
|
(define-type (Tree A) (U False (Node A)))
|
|
|
|
(struct: (A) Node
|
|
([val : A] [left : (Tree A)] [right : (Tree A)])
|
|
#:transparent)
|
|
|
|
(: tree-map (All (A B) (A -> B) (Tree A) -> (Tree B)))
|
|
(define (tree-map f tree)
|
|
(match tree
|
|
[#f #f]
|
|
[(Node val left right)
|
|
(Node (f val) (tree-map f left) (tree-map f right))]))
|
|
|
|
;; unit tests
|
|
(require typed/rackunit)
|
|
(check-equal?
|
|
(tree-map add1 (Node 5 (Node 3 #f #f) #f))
|
|
(Node 6 (Node 4 #f #f) #f))
|