32 lines
715 B
Racket
32 lines
715 B
Racket
|
|
#lang racket/load
|
|
|
|
|
|
(module test typed/racket
|
|
|
|
|
|
(provide a:list-helper)
|
|
|
|
(define-type (Append-List+ elem) (U (a:singleton elem) (a:join elem)))
|
|
|
|
(define-struct: (elem) a:join
|
|
((left : (Append-List+ elem)) (right : (Append-List+ elem)))
|
|
#:transparent)
|
|
|
|
(define-struct: (elem) a:singleton
|
|
((elem : elem)) #:transparent)
|
|
|
|
(: a:list-helper (All (elem) ((Pair elem (Listof elem)) -> (Append-List+ elem))))
|
|
(define (a:list-helper elems)
|
|
(cond
|
|
((empty? (cdr elems)) (make-a:singleton (car elems)))
|
|
(else (make-a:join (make-a:singleton (car elems))
|
|
(a:list-helper (cdr elems))))))
|
|
)
|
|
|
|
(module test2 racket
|
|
(require 'test)
|
|
(a:list-helper (list 1 2)))
|
|
|
|
(require 'test2)
|