Remove terminal contract generic interface.

This commit is contained in:
Eric Dobson 2014-01-10 09:16:17 -08:00
parent 751835c7da
commit 9bb66a9c58
4 changed files with 12 additions and 19 deletions

View File

@ -36,9 +36,8 @@
[(define (sc-map v f) v) [(define (sc-map v f) v)
(define (sc-traverse v f) (void)) (define (sc-traverse v f) (void))
(define (sc->contract v f) (simple-contract-syntax v)) (define (sc->contract v f) (simple-contract-syntax v))
(define (sc->constraints v f) (simple-contract-restrict (simple-contract-kind v)))] (define (sc->constraints v f) (simple-contract-restrict (simple-contract-kind v)))
#:methods gen:terminal-sc (define (sc-terminal-kind v) (simple-contract-kind v))]
[(define (terminal-sc-kind v) (simple-contract-kind v))]
#:methods gen:custom-write [(define write-proc simple-contract-write-proc)]) #:methods gen:custom-write [(define write-proc simple-contract-write-proc)])
(define (flat/sc ctc [name #f]) (define (flat/sc ctc [name #f])

View File

@ -82,7 +82,7 @@
[(arr/sc: args rest (list (any/sc:) ...)) [(arr/sc: args rest (list (any/sc:) ...))
(arr/sc args rest #f)] (arr/sc args rest #f)]
[(none/sc:) any/sc] [(none/sc:) any/sc]
[(app terminal-sc-kind 'flat) any/sc] [(app sc-terminal-kind 'flat) any/sc]
[else sc])) [else sc]))

View File

@ -18,14 +18,13 @@
[sc-traverse (static-contract? (static-contract? variance/c . -> . any/c) . -> . void?)] [sc-traverse (static-contract? (static-contract? variance/c . -> . any/c) . -> . void?)]
[sc->contract (static-contract? (static-contract? . -> . syntax?) . -> . syntax?)] [sc->contract (static-contract? (static-contract? . -> . syntax?) . -> . syntax?)]
[sc->constraints (static-contract? (static-contract? . -> . contract-restrict?) . -> . contract-restrict?)] [sc->constraints (static-contract? (static-contract? . -> . contract-restrict?) . -> . contract-restrict?)]
[terminal-sc-kind (static-contract? . -> . (or/c #f contract-kind?))] [sc-terminal-kind (static-contract? . -> . (or/c #f contract-kind?))]
[sc? predicate/c] [sc? predicate/c]
) )
prop:combinator-name prop:combinator-name
gen:sc gen:sc)
gen:terminal-sc)
(define variance/c (or/c 'covariant 'contravariant 'invariant)) (define variance/c (or/c 'covariant 'contravariant 'invariant))
@ -109,17 +108,13 @@
;; sc->constraints: static-contract? (static-contract? -> constraint-set?) -> constraint-set? ;; sc->constraints: static-contract? (static-contract? -> constraint-set?) -> constraint-set?
;; Takes a static contract and computes the constraint set for a static contract. ;; Takes a static contract and computes the constraint set for a static contract.
;; The function argument should be used for sub parts of the static contract. ;; The function argument should be used for sub parts of the static contract.
[sc->constraints sc f]) [sc->constraints sc f]
;; sc-terminal-kind: static-contract? -> (or/c #f contract-kind?)
;; Functionality that terminal static contracts should support
;; Terminal static contracts are ones without any sub static contracts
(define-generics terminal-sc
;; terminal-sc-kind: terminal-static-contract? -> (or/c #f contract-kind?)
;; Returns the kind of contract that this represents ;; Returns the kind of contract that this represents
;; Returns #f if it is not a terminal contract ;; Returns #f if it is not a terminal contract
[terminal-sc-kind terminal-sc] [sc-terminal-kind sc]
#:defaults ([(λ (v) #t) #:fallbacks
(define (terminal-sc-kind v) #f)])) [(define (sc-terminal-kind v) #f)])
;; Super struct of static contracts ;; Super struct of static contracts
(struct static-contract () (struct static-contract ()

View File

@ -41,6 +41,5 @@
(define (sc->contract v unused-f) (define (sc->contract v unused-f)
(match-define (name args ...) v) (match-define (name args ...) v)
body) body)
(define (sc->constraints v f) (simple-contract-restrict 'kind.sym))] (define (sc->constraints v f) (simple-contract-restrict 'kind.sym))
#:methods gen:terminal-sc (define (sc-terminal-kind v) 'kind.sym)])]))
[(define (terminal-sc-kind v) 'kind.sym)])]))