It seems that the conversion of TR types to contracts can result in contracts
like (or/c (cons/c any/c any/c) (cons/c any/c any/c)) that apparently cause
errors when run.
I’m too tired to do a good job of providing a full example… no, actually, it’s
pretty easy. Run this program:
#lang racket
(module foo typed/racket
(provide val->autorun-table)
(define-type Autorun-Result
(U (Pair 'success Any)
(Pair 'fail Any)))
(define-type Autorun-Entry
(List String Autorun-Result))
(define-predicate autorun-entry? Autorun-Entry)
(define-type Autorun-Table (Listof Autorun-Entry))
(define-predicate autorun-table? Autorun-Table)
(define (val->autorun-table [val : Any])
: (U False Autorun-Table)
(cond
[(list? val)
(define first-bad (findf (compose not autorun-entry?) val))
(when first-bad
(fprintf (current-error-port)
"not an expected autorun entry:\n~e\n"
first-bad))
(cast val Autorun-Table)]
[else
(error 'maybe-fetch-autorun-results
"result of read wasn't a list. moreinfo.")])))
(require 'foo)
(val->autorun-table '(("1234" (fail (zz 1234) (d 9)))))
… see this error:
val->autorun-table: broke its own contract
two of the clauses in the or/c might both match: (cons/c any/c Any) and
(cons/c any/c Any)
produced: '(fail (zz 1234) (d 9))
in: the 2nd element of
an element of
a part of the or/c of
the range of
(->
any/c
(or/c
#f
(listof
(list/c
any/c
(or/c
(cons/c any/c Any)
(cons/c any/c Any))))))
contract from: (anonymous-module foo)
blaming: (anonymous-module foo)
(assuming the contract is correct)
at: 38-unsaved-editor:20.11
Basically, it looks like the type is getting simplified a bit as it’s being
translated into a contract, and unfortunately, the resulting contract is
unsatisfiable?
Is this a bug, or a known limitation?
John
--
You received this message because you are subscribed to the Google Groups
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/racket-users/295471a4-99d9-4bbe-8e7b-351c1bb75e96%40mtasv.net.