On Thu, Aug 11, 2011 at 9:32 AM, Matthias Benkard <mailing-li...@mail.matthias.benkard.de> wrote: > Hi, > > I recently discovered Typed Racket and am having a lot of fun with it. > Occurrence typing is pretty amazing.
Great! Glad you're enjoying it. > I've stumbled across a couple of problems when trying to use > dictionaries and sequences, though. Unfortunately, extensible types such as sequences and dictionaries are something that Typed Racket doesn't currently do a great job with. > In particular, I'm currently > having trouble defining a predicate for the (Sequenceof Any) type. I > tried importing sequence? with the type that I think it should have: > > (require/typed racket > [sequence? (Any -> Boolean : (Sequenceof Any))]) > > This made Racket complain about not being able to create a contract > out of the type specification: > > Type Checker: Type (Any -> Boolean : (Sequenceof Any)) could not > be converted to a contract. in: (Any -> Boolean : (Sequenceof Any)) In general, something like this won't work -- you can't import something with a predicate type like this. > In addition, define-predicate seems to do something weird (type-incorrect > even): > > > (define-predicate anyseq? (Sequenceof Any)) > > anyseq? > - : (Any -> Boolean : (Sequenceof Any)) > #<make-contract> > > (anyseq? 100) > procedure application: expected procedure, given: > #<make-contract>; arguments were: 100 > > Is this a bug, or am I misusing define-predicate? This is a bug; it should give you roughly the same error as above, but for the different reason. The problem is that we'd need to check *every* element of the sequence to make sure it had the right type, which a simple predicate can't do. You'd need to write a coercion function, which Typed Racket could probably help with -- I'll try to do that soon. -- sam th sa...@ccs.neu.edu _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users