Ah I found documentation for `#{ x : ... }` at here[1].

[1]: 
https://docs.racket-lang.org/ts-guide/more.html#%28part._.Annotating_.Single_.Variables%29


On Monday, March 6, 2017 at 9:50:39 PM UTC-8, lu wrote:
> Awesome. Thanks! Where can I find the documentation for this TR reader syntax?
> 
> Why is TR not able to figure out the type for these variables without human 
> help? Does that mean the implementation of `command-line` is in TR and the 
> types of those variables are inferred by the type system, or they are 
> explicitly typed to be `Any` for simplicity? 
> 
> 
> On Monday, March 6, 2017 at 2:48:15 PM UTC-8, Sam Tobin-Hochstadt wrote:
> > You can use the #{x : T} reader syntax to annotate variables in macros
> > like `command-line`. Here's a working version of your code:
> > 
> > ```
> > #lang typed/racket
> > 
> > (define *channel* (make-parameter "#general"))
> > (define *message* : (Parameterof (Listof String)) (make-parameter '()))
> > 
> > 
> > (define (parse-cmdline)
> >   (command-line
> >    #:program "q"
> >    #:once-each
> >    [("-c" "--channel") #{ch : String} "slack channel to post (default:
> > use .qrc setting or default)" (*channel* ch)]
> >    #:args #{msg : String}
> >    (*message* msg)))
> > ```
> > 
> > On Mon, Mar 6, 2017 at 2:08 AM, kay <> wrote:
> > > For a complex syntax form like `command-line`, I have difficulty 
> > > correctly annotate the bindings it defines.
> > >
> > > More specifically, in the below code, for variable `msg`, even the 
> > > document[1] says the `#:args` binds as list of **strings**, but the error 
> > > indicates that it somehow is declared as `Listof Any`.
> > >
> > > Similarly, for variable `ch` bound in line 11, I believe it should always 
> > > be `String`, but it somehow is declared to be `Any`.
> > >
> > > What should I do with this type of error, if I want my varaibles to be 
> > > more precisely typed than just `Any`?
> > >
> > >
> > > [1]: 
> > > https://docs.racket-lang.org/reference/Command-Line_Parsing.html?q=command-line#%28form._%28%28lib._racket%2Fcmdline..rkt%29._command-line%29%29
> > >
> > > ```
> > >  1      #lang typed/racket
> > >  2
> > >  3      (define *channel* (make-parameter "#general"))
> > >  4      (define *message* : (Parameterof (Listof String)) (make-parameter 
> > > '()))
> > >  5
> > >  6
> > >  7      (define (parse-cmdline)
> > >  8          (command-line
> > >  9           #:program "q"
> > > 10           #:once-each
> > > 11           [("-c" "--channel") ch "slack channel to post (default: use 
> > > .qrc setting or default)" (*channel* ch)]
> > > 12           #:args msg
> > > 13           (*message* msg)))
> > > 14
> > > 15
> > > 16      #|
> > > 17      tr.rkt:11:91: Type Checker: Wrong argument to parameter - 
> > > expected String and got Any in: (*channel* ch)
> > > 18      tr.rkt:13:5: Type Checker: Wrong argument to parameter - expected 
> > > (Listof String) and got (Listof Any) in: (*message* msg)
> > > 19      |#
> > > ```
> > >
> > > --
> > > You received this message because you are subscribed to the Google Groups 
> > > "Racket Users" group.
> > > To unsubscribe from this group and stop receiving emails from it, send an 
> > > email to [email protected].
> > > For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to