[racket] Typed Racket: Command-line parsing problems
Hello!
I am using Typed Racket (version 5.2.1) and I'm porting an existing Racket
program over to it. It's working well, except for a few minor things like
"assoc" exclusively accepting lists of pairs and not lists of lists, which I
found very odd (nothing a "filter" couldn't solve, though).
After porting nearly everything I was left with typing up the command-line
parser. However, I am getting a type error at the following simplified part:
#lang typed/racket
(define: *filename* : String "")
(define: *mode* : (U 'version 'unset 'do-something-useful) 'unset)
(command-line
#:program "mysuperprogram"
#:once-any
(("-v" "--version") "Prints the version of the program"
(set! *mode* 'version))
#:once-each
(("-i" "--file") fname
"The path to the file"
(set! *filename* fname)))
The error is:
Type Checker: Mutation only allowed with compatible types:
Any is not a subtype of String in: (set! *filename* fname)
I wonder, why does fname have the "Any" type? Yes, I didn't explicitly give
fname a type, but I was hoping that the typed version of "command-line"
would do that (after all, you'd expect a text interface to give you some
sort of text in some encoding).
Also there doesn't seem to be a "command-line:" function. I tried using "
(fname : String)" instead of just "fname" but that doesn't work...
How can I get Strings out of this?
Best regards,
Tim