[plt-scheme] Re: Re: Typed Scheme: Is there any easy way around this?
On 6/1/07, Anton van Straaten <anton at appsolutions.com> wrote:
> Matthias Felleisen wrote:
> >
> > On Jun 1, 2007, at 1:37 AM, Matthew Swank wrote:
> ...
> >> Well, I don't use contracts. My basis for a claim of verbosity is my
> >> (somewhat limited) experience of Haskell and straight lisp.
> >>
> >> Compared to those, Typed Scheme is verbose.
> >
> >
> > That's something we can't fix so don't report it "-)
>
> There might be room for improvement, though. Maybe Typed Scheme can
> already do the following, I've only read some docs so far.
>
> The approach in which types can be annotated inline, like [n : number],
> is used in the MLs too. My experience is that such annotations make ML
> code more difficult to read and follow. Ironically, that's partly
> because it starts requiring a lot of parentheses, which break the flow
> of argument lists. If I find myself needing lots of annotations for
> some reason, I prefer to use a module signature to separate the
> annotations from the code. Alternatively, the Haskell approach of
> prepending the type signature to the function is a good one.
>
> Having the option to do something like this could help mitigate the
> verbosity. (Of course, I'm speculating having only read Typed Scheme
> code so far, not written it.)
>
> So e.g. instead of:
>
> (define: (find [v : number] [l : (Listof number)]) : (Maybe number)
>
> ...you might use something more like:
>
> (define/type ((number * (Listof number)) -> (Maybe number)) ;[*]
> (find v l)
> ...)
>
> If it's already possible to do something like this, I await the
> cluestick eagerly.
There isn't something like that built-in at the moment, but I could be
persuaded to add one if there was a syntax I liked.
However, the define/type form you have there should be a very simple
syntax-rules macro, so if you want it, it's in a sense already there.
> [*] using fantasy dot-free infix type notation
No need for fantasy, the type of functions from A and B to C is (A B
-> C) in Typed Scheme.
--
sam th
samth at ccs.neu.edu