On Wed, Feb 22, 2012 at 3:51 PM, Neil Toronto <neil.toro...@gmail.com> wrote:
> The following program types without trouble:
>
>
> #lang typed/racket
>
> (struct: (a) Foo ())
>
> (: make-foo (All (a) (a -> (Foo a))))
> (define (make-foo x)
>  (Foo))
>
> (ann (make-foo 1) : (Foo String))
>
> It doesn't seem like it should, though. If this is the right behavior, is
> there a way to get a `Foo' parameterized on type `a' without actually
> storing the value? I'm trying to use TR to check programs that can't
> actually be run (i.e. written in a lambda calculus extended with uncountable
> sets).

What you're seeing is that TR currently implements type instantiation
with substitution, and so encodings like 'phantom types' don't work.
This isn't a soundness hole, but it's something that I'm willing to
change if there are programs you'd like to write that you can't.  Can
you give a more complete example?
-- 
sam th
sa...@ccs.neu.edu

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to