Parametric polymorphism: Difference between revisions

Content added Content deleted
(Better D entry)
(Add Racket entry)
Line 554: Line 554:
"A"
"A"
-> NIL</pre>
-> 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}}==
=={{header|Scala}}==