[racket] An easy route to define-datatype in BSL?

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Mon Nov 5 08:19:44 EST 2012

At Mon, 05 Nov 2012 08:13:16 -0500, Prabhakar Ragde wrote:
> On 2012-11-05 6:43 AM, Matthew Flatt wrote:
> > Here's a first cut at a module that you can import into BSL programs.
> >
> > The least obvious part is defining a new `define-type' and `type-case'
> > that invents hidden names for the variants and them maps between them
> > while expanding to the original forms.
> Wow, thanks. I will study the code and do my best to understand it, and 
> test it for deployment next fall. I can already see the outline of how 
> your code achieves what you describe, but could you please say a few 
> words about why that's necessary, to improve my understanding of BSL? 
> Thanks again. --PR

You had worked out the need for `first-order->higher-order' on
contracts for variant fields. The flip side is using BSL's `define' to
define variant constructors so that BSL is willing to see them used in
an application position.

But if the constructors are defined with BSL's `define', then you have
to give different names to the variants as defined by `define-type', so
those can be wrapped by BSL-friendly definitions. The last piece, then,
is to rewrite variant names in a `type-case' (which correspond to the
BSL-`define'd wrappers) to the names as defined by `define-type'.

Posted on the users mailing list.