38 lines
753 B
Racket
38 lines
753 B
Racket
#lang turnstile
|
|
|
|
(provide Maybe
|
|
None
|
|
None*
|
|
Some
|
|
some
|
|
none)
|
|
|
|
(require "core-types.rkt")
|
|
|
|
|
|
(define-constructor* (none* : None*))
|
|
(define-constructor* (some : Some v))
|
|
|
|
(define-type-alias None (None*))
|
|
|
|
(define none : None
|
|
(none*))
|
|
|
|
(define-type-alias (Maybe X)
|
|
(U None
|
|
(Some X)))
|
|
|
|
#;(define (∀ (X Y) (partition/maybe [xs : (List X)]
|
|
[pred : (→fn X (Maybe Y))]
|
|
-> (Tuple (List Y) (List X))))
|
|
#f)
|
|
|
|
#;(require (only-in "core-expressions.rkt" match error discard)
|
|
"prim.rkt")
|
|
#;(define (∀ (X) (unwrap! [x : (Maybe X)] -> (Maybe X)))
|
|
(match x
|
|
[(some discard)
|
|
(error "some")]
|
|
[none
|
|
(error "none")]))
|