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: (: listoflength2? (Any -> Boolean : (Pairof Any (Pairof Any Null)))) (define (listoflength2? a) (and (pair? a) (pair? (cdr a)) (null? (cddr a)))) => Type Checker: Expected result with filter (((List Any Any) @ a) | (! (List Any Any) @ a)), got filter ((AndFilter (Null @ (cdr cdr) a) ((Pairof Any Any) @ (cdr) a) ((Pairof Any Any) @ a)) | (OrFilter (! Null @ (cdr cdr) a) (! (Pairof Any Any) @ (cdr) a) (! (Pairof Any Any) @ a))) in: (and (pair? a) (pair? (cdr a)) (null? (cddr a))) > This is curious, because the text '(AndFilter (Null @ (cdr cdr) a) ((Pairof Any Any) @ (cdr) a) ((Pairof Any Any) @ a)) ' looks like it's saying exactly what '(Pairof Any (Pairof Any Null))' does. Again, any help appreciated. This typed racket stuff is *way* more fun than the actual grading that the script is supposed to be helping me with... :). John
smime.p7s
Description: S/MIME cryptographic signature
_________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev