On Nov 21, 2012, at 11:34 AM, Pierpaolo Bernardi wrote: > #lang typed/racket > > (define-type sex (U -1 0 1)) > > (struct: sexomino > ((n : sex) > (e : sex) > (s : sex) > (o : sex))) > > (: sexomini (Listof sexomino)) > (define sexomini > (let () > (define n 0) > (define f -1) > (define m 1) > (define s sexomino) > (list (s n m n n) (s f f n n))))
I believe nobody responded. On occasion the type checker needs help narrowing
down a type, as in your example. Specifically, the type checker on occasion
guesses (fancy word is: "locally infers") a type and to make programming
convenient, it guesses a little larger than good for things like your example.
The easy fix is
#lang typed/racket
(define-type sex (U -1 0 1))
(struct: sexomino
((n : sex)
(e : sex)
(s : sex)
(o : sex)))
(: sexomini (Listof sexomino))
(define sexomini
(let ()
(define n 0)
(: f sex)
(define f -1)
(define m 1)
(define s sexomino)
(list (s n m n n) (s f f n n))))
This is a compromise to accommodate code from an untyped basis mostly as is and
helping programmers find even narrower types when they wish to make sharp
invariants explicit.
Think of TR as a wide-spectrum typed programming experience
-- Matthias
smime.p7s
Description: S/MIME cryptographic signature
____________________ Racket Users list: http://lists.racket-lang.org/users

