Hi,

The following example works in Typed Racket:

(struct foo
  ([c : Float]
   [f : (foo -> Float)]))

(define (test [f : foo]) : Float
  ((foo-f f) f))

(test
 (foo 1.0
      (lambda ([x : foo]) : Float
        (match x ((foo c _) c)))))

(struct bar foo
  ([i : Float]))

(test
 (bar 1.0
      (lambda ([x : foo]) : Float
        (match x
          ((bar c _ i) (+ c i))))
      1.0))


Unfortunately, I couldn't make foo polymorphic:

(struct (R) foo
  ([c : R]
   [f : ((foo R) -> R)]))

(define (test [f : (foo Float)]) : Float
  ((foo-f f) f))

(test
 (foo 1.0
      (lambda ([x : (foo Float)]) : Float
        (match x
          ((foo c _) c)))))

(struct (R) bar foo
  ([i : Float]))

(test
 (bar 1.0
      (lambda ([x : (foo Float)]) : Float
        (match x
          ((bar c _ i) (+ c i))))
      1.0))

The problem is in the match in the last expression, which shows three type
errors:

Type Checker: cannot apply a function with unknown arity; function
`unsafe-struct-ref' has type Procedure which cannot be applied in: (match x
((bar c _ i) (+ c i)))
  #(364 41)

Can someone tell me what I'm doing wrong here?

Thanks,
António.
____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to