Thank you for this explanation. I consider myself largely an outsider looking in on module systems, but I often hear SML and OCaml programmers complaining, wondering when Haskell is going to “get a real module system”. I’d like to do right thing in Hackett if I can, but I don’t really know what the right thing is, since I have written precious little ML, and what I have written is certainly not enough to get a feel for how modules affect large program construction. It’s unfortunately difficult (perhaps impossible?) to get an understanding of the usefulness of an abstraction without using it oneself, so maybe I ought to just sit down and write some ML programs.
Alexis > On Jan 21, 2018, at 1:26 PM, Matthias Felleisen > <[email protected]> wrote: > > Units were the wrong approach to everyday modularity.They were, and > they are, the correct solution to design problems such as those > explained in our original paper on the idea. > > Units suffer from a large notational overhead for everyday use. The > second edition, due to Owens and Flatt, does a bit better with the > introduction of 'linking inference’ but it was too little too ate. The > other disadvantage of units concerns syntactic abstraction. You really > want to parameterize modules over their implementation language. > Shriram generalized units to unit/lang in his dissertation, but this > proved too difficult to implement. Matthew proposed to make modules > first-order, as opposed to first-class values, and this worked out > well. I still use units on rare occasions, for example to mimic > complex testing contexts and to deploy the same module-level > abstraction _twice_ in the same program. These situations are rare, > however. > > Historical note. ML programmers got it similarly wrong when they > pushed for “fully functorized” style. Once their compilation manager > came online, they abandoned this style too and simply allowed the > linker to connect structs as specified. I happened to be with these > MLers for a year, which inspired me for the unit-like abstraction when > we launched Racket/PLT Scheme. Functors are needed in the same > situations as units but had less expressive power (recursive/dynamic > linking). > > — Matthias -- 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]. For more options, visit https://groups.google.com/d/optout.

