Hey all,

One feature of typed racket that makes translation between untyped and
typed code somewhat less simple than adding or removing type signatures is
that certain forms require rewriting/alteration of the untyped form itself.
Others allow stand-alone declaration of the types prior to the form.

  #lang racket
(define (louder s) (string-append s "!"))

becomes
#lang typed/racket
(: louder : String -> String)
(define (louder s) (string-append s "!"))

but

#lang racket
(struct arrow (dom cod))

becomes
#lang typed/racket
(struct: arrow ([dom : Any] [cod : Any]))

or a stricter
#lang typed/racket
(struct: (A B) arrow ([dom : A] [cod : B]))

I tend to prefer the former case, as moving to untyped code just requires
removal of the (: louder ...) type declaration.

I'd really dig the addition of an alternate way to declare types on structs
in particular:

#lang typed/racket
(: arrow (ForAll (A B) (StructOf A B)))
(struct arrow (a b))

This allows me to reuse my mental untyped code parser for struct forms,
while the struct: form requires an additional rule. It also makes
declaration of types more uniform. Not sure whether this is possible.

Thanks all,
-Patrick

On 20 September 2012 12:02, <thorso...@lavabit.com> wrote:

> Thank you all for the replies.
>
> I'll give it a try.
>
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
>
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to