Parametric polymorphism: Difference between revisions

Add Racket entry
(Better D entry)
(Add Racket entry)
Line 554:
"A"
-> NIL</pre>
 
=={{header|Racket}}==
 
Typed Racket has parametric polymorphism:
 
<lang 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))
</lang>
 
=={{header|Scala}}==
Anonymous user