diff --git a/collects/tests/typed-scheme/succeed/even-odd.ss b/collects/tests/typed-scheme/succeed/even-odd.ss new file mode 100644 index 00000000..7634f7a2 --- /dev/null +++ b/collects/tests/typed-scheme/succeed/even-odd.ss @@ -0,0 +1,18 @@ +#lang typed/scheme + +(define-struct: (A) Z ([b : A])) +(define-struct: (A) O ([b : A])) + +(define-type Bitstring (Rec B (U '() (Z B) (O B)))) +(define-type EvenParity (Rec Even (U '() (Z Even) (O (Rec Odd (U (Z Odd) (O Even))))))) +(define-type OddParity (Rec Odd (U (Z Odd) (O (Rec Even (U '() (Z Even) (O Odd))))))) + +(: append-one (case-lambda (EvenParity -> OddParity) + (OddParity -> EvenParity) + (Bitstring -> Bitstring))) +(define (append-one l) + (if (null? l) + (make-O '()) + (if (Z? l) + (make-Z (append-one (Z-b l))) + (make-O (append-one (O-b l)))))) diff --git a/collects/typed-scheme/types/remove-intersect.ss b/collects/typed-scheme/types/remove-intersect.ss index a9680bb9..dbf1c41b 100644 --- a/collects/typed-scheme/types/remove-intersect.ss +++ b/collects/typed-scheme/types/remove-intersect.ss @@ -50,6 +50,9 @@ [(or (list (Pair: _ _) _) (list _ (Pair: _ _))) #f] + [(or (list (Value: '()) (Struct: n _ flds _ _ _ _ _)) + (list (Struct: n _ flds _ _ _ _ _) (Value: '()))) + #f] [(list (Struct: n _ flds _ _ _ _ _) (Struct: n _ flds* _ _ _ _ _)) (for/and ([f flds] [f* flds*]) (overlap f f*))]