#;
(exn-pred exn:fail:contract? ".*pair?.*" #rx".*contract.*\\(->.*")

#lang scheme/load

(module tree typed-scheme
 (define-type-alias Tree (Rec T (U (Pair T T) Number)))

 (: tree-sum (Tree -> Number))
 (define (tree-sum t)
   (cond
     [(number? t) t]
     [else (+ (tree-sum (car t))
              (tree-sum (cdr t)))]))

 (provide tree-sum))

(module client scheme
 (require 'tree)
 (define (try-it bad?)
   (if bad?
       (tree-sum (cons 5 #f))
       (tree-sum (cons 5 6))))
 (provide try-it))

(require 'client)

(try-it #t)

#;
(exn-pred exn:fail:contract? ".*cons/c.*" #rx".*contract.*\\(->.*")

#lang scheme/load

(module tree typed-scheme
 (define-type-alias Tree (Rec T (U (Pair T T) Number)))

 (: tree-sum (Tree -> Number))
 (define (tree-sum t)
   (cond
     [(number? t) t]
     [else (+ (tree-sum (car t))
              (tree-sum (cdr t)))]))

 (provide tree-sum))

(module client scheme
 (require 'tree)
 (define (try-it bad?)
   (if bad?
       (tree-sum (cons 5 #f))
       (tree-sum (cons 5 6))))
 (provide try-it))

(require 'client)

(try-it #t)

Fix error message pattern for use of `cons/c`.
Fix error message pattern for use of `cons/c`.
