private/types.ss
(module types mzscheme
  
  (require  (lib "struct.ss")
            (lib "match.ss")
            (lib "list.ss")
            (lib "trace.ss")
            (all-except (lib "unit.ss") rename)
            "type-def-structs.ss"
            "signatures.ss"
            "planet-requires.ss"
            "type-printer-unit.ss"
            "big-unit.ss")
  
  (require (planet "environment.ss" ("cobbe" "environment.plt" 3 0)))  
  (require-libs)
  
  

  (define-syntax ->
    (syntax-rules ()
      [(_ dom ... rng)
       (make-funty (list (make-arr* (list dom ...) rng)))]))
  (define-syntax ->*
    (syntax-rules ()
      [(_ dom rng)
       (make-funty (list (make-arr* dom rng)))]
      [(_ dom rst rng)
       (make-funty (list (make-arr* dom rng rst)))]))
  (define-syntax cl->
    (syntax-rules ()
      [(_ [(dom ...) rng] ...)
       (make-funty (list (make-arr* (list dom ...) rng) ...))]))
  
  
  
  
  (provide-signature-elements type-printer^)
  (require "type-structs.ss")
  
  (provide (all-defined)
           (all-from-except "type-structs.ss" make-arr)
           (rename make-arr* make-arr))  

  
  (define-syntax define/match
    (syntax-rules ()
      [(_ nm cl ...) (define nm (match-lambda* cl ...))]))
  
  (define make-arr*
    (case-lambda [(dom rng) (make-arr* dom rng #f)]
                 [(dom rng rest) (make-arr dom rng rest)]))
  
  (define (make-poly* tvars t)
    (if (null? tvars) t (make-poly tvars t)))
  
  (define N (make-base-type 'number))
  (define B (make-base-type 'boolean))
  (define Sym (make-base-type 'symbol))
  (define Void (make-base-type 'void))
  (define Bytes (make-base-type 'bytes))
  (define String (make-base-type 'string))
  (define Keyword (make-base-type 'keyword))
  
  (define Univ (make-univ))
  (define Dyn (make-dynamic))
  

  
  )