[plt-scheme] How to define exceptions in typed-scheme?
I'm using Typed Scheme, and I'm trying to define exception structures that
inherit from the native PLT exception hierarchy. Typed-Scheme doesn't
provide types for these structs, so I'm having to do it myself with
require/typed.
I'm going to be defining exceptions (all extensions of exn:contract:fail)
in multiplex modules, so I would like to write an exn-typed module that
provides the necessary exn structs with types. Unfortunately, that doesn't
work.
exns-typed.ss:
#lang typed-scheme
(require/typed scheme
[struct exn ([message : String]
[continuation-marks : Continuation-Mark-Set])]
[struct (exn:fail exn) ()]
[struct (exn:fail:contract exn:fail) ()])
(provide [struct-out exn]
[struct-out exn:fail]
[struct-out exn:fail:contract])
date.ss:
#lang typed-scheme
(require "exns-typed.ss")
(define-struct: calendar-date ([month : Integer]
[day : Integer]
[year : Integer]))
(define-struct: (exn:fail:contract:invalid-date-string exn:fail:contract)
([str : String]))
When I try to compile date.ss in DrScheme, I get the following error
message:
struct-out: multiple imports (struct:exn and struct:exn) for structure-type identifier in: struct:exn
If I comment out the require in date.ss and replace it with the
require/typed clause from exns-typed.ss, things compile fine. So this
appears to mean that I can't abstract out this clause into a separate
module.
Am I out of luck, or is there a way to accomplish this?
Thanks,
Richard