Hi,
changing some typed racket code from using define-struct: to struct:, I have
problems getting my test code to run.
While still using define-struct:, I had a language specification of #lang
typed/racket/no-check, because omitting the "no-check" I was getting the
Type Checker: Error in macro expansion -- untyped variable: run/inner
error. Now when using struct: with that language, I get the error:
Triple: illegal use of syntax in: (Triple "count" number? 1)
So now I have problems when using with and without "no-check"... Would someone
perhaps have a suggestion what I might do to get the test code working in one
or the other way?
Many thanks in advance!
Sigrid
BTW: Right now for posting, I wanted to put both the definitions and the test
code in one file, and having everything in one module it worked fine. But when
I have 2 modules like the code I'm appending below, I get the aforementioned
error.
************ types.rkt
***************************************************************************
#lang typed/racket
(provide (all-defined-out))
(define-type Value (U Number String))
(struct: Triple ((name : String) (type : (U (Any -> Boolean : Number) (Any ->
Boolean : String))) (value : Value))
#:mutable
#:property prop:equal+hash
(list (lambda (t1 t2 equal?-recur) ; Attribute names are case insensitive,
attribute type names are not; values are treated individually for each variant
(and (string=? (string-upcase (Triple-name t1)) (string-upcase
(Triple-name t2))) (eq? (Triple-type t1) (Triple-type t2)) (equal?
(Triple-value t1) (Triple-value t2))))
(lambda (t hash-recur)
(+ (hash-recur (string-upcase (Triple-name t))) (* 3 (hash-recur
(Triple-type t))) (* 3 (hash-recur (Triple-value t)))))
(lambda (t hash2-recur)
(+ (hash2-recur (string-upcase (Triple-name t))) (* 3 (hash2-recur
(Triple-type t))) (* 3 (hash2-recur (Triple-value t)))))))
************ types-test.rkt
***************************************************************************
#lang typed/racket/no-check
(require rackunit)
(require rackunit/text-ui)
(require "../types.rkt")
(define-test-suite equality-functions
(test-case
"Triple equality"
(let: ((t1 : Triple (Triple "count" number? 1)) (t2 : Triple (Triple "count"
number? 1)) (t3 : Triple (Triple "count" string? "1")) (t4 : Triple (Triple
"Count" number? 1)) (t5 : Triple (Triple "count" number? 2)))
(check-equal? t1 t2)
(check-equal? t1 t4)
(check-not-equal? t1 t5))))
_________________________________________________
For list-related administrative tasks:
http://lists.racket-lang.org/listinfo/users