[racket-dev] more general typed/scheme bafflement...
On Tue, Jun 7, 2011 at 4:57 PM, John Clements <clements at brinckerhoff.org> wrote:
>
> On Jun 7, 2011, at 4:26 PM, Carl Eastlund wrote:
>
>> John,
>>
>> You had an easy time with + because it is monomorphic. You are having
>> trouble applying one polymorphic function (map) to another (list or
>> list2). Instantiate one or both functions explicitly, and Typed
>> Racket won't get confused by the guesswork.
>>
>> Also, T ... i in a type does not mean T ... followed by i. It means T
>> ... *indexed* by i. It's clarifying what the ... ranges over.
>
> Awesome! Many thanks. Next question. I'm reading sexps from a file, so typed/racket insists that I check their shape before using them. That's fine, but I find myself unable to define the "(Pairof Any (Pairof Any Null)) predicate the way I'd expect it to be defined:
What you actually want to use here is `define-predicate', which will
automatically define the predicate you want given the type.
>
> (: listoflength2? (Any -> Boolean : (Pairof Any (Pairof Any Null))))
> (define (listoflength2? a)
> (and (pair? a) (pair? (cdr a)) (null? (cddr a))))
This definition will eventually typecheck, but not yet. :)
--
sam th
samth at ccs.neu.edu