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}}== |