[plt-scheme] typed teaching languages
The languages are located in collects/lang/htdp*. The primitives come
from private/ and are obviously labeled as such. Create copies and
introduce type checking at your leisure.
;; ---
WARNING: If you really believe that type checking should be an
integral part of the first few weeks, you do NOT need to use Typed
Scheme for this purpose. The type system of Typed Scheme is designed
so that programmers can easily port existing Scheme code, programmed
in an idiomatic manner, into a typed setting -- with little more
effort than annotating all binding occurrences of variables and
fields (aka declarations). It isn't perfect in this manner but it's
the best such practical effort out there.
Since your programming novices are NOT porting code and you DO NOT
wish to program in the specific idioms of Scheme, I recommend that
you spare yourself the rather large implementation effort for now and
experiment with OCAML instead. The language is quite similar to
Scheme but comes with a native type system. (I strongly recommend
always using type annotations and to shunt type inference as much as
possible.) Use only those constructs that are close to the ones in
HtDP teaching languages. While this doesn't give you the teaching
languages, it restricts the potential for truly weird syntax errors.
;; ---
IN GENERAL, we have not thought through the exact nature of the type
system that is appropriate for novice programmers. We do know,
however, that we can build a contract system that supports dynamic
checking. Doing so will be our next step.
The DEIN PROGRAM sister project in Germany (included in the core
distribution) has beaten us this time and has already done so. I
suspect our solution will be similar to theirs.
;; ---
Good luck -- Matthias
On Aug 8, 2009, at 12:05 PM, Todd O'Bryan wrote:
> Can somebody explain how the structure of the HtDP teaching
> languages works?
>
> I'm interested in, as an experiment, having my students write type
> annotations for their programs, just to see whether it clears up their
> type confusions or makes it even harder for them to get things right.
> I've received advice from several people stating that this is a bad
> idea and that I am going to create a great deal of pain for myself, so
> I've been forewarned. Realize, however, that I'll spend probably two
> months dealing with simple functions and structures before I ever get
> to lists, so the problems of polymorphism that rear their heads so
> early in a typical college class won't bother me until Halloween or
> so. I'm willing to risk the pain, and I'm even willing to accept the
> laughing and pointing that are likely to occur when I give up and tell
> everyone that I now accept that this was just a bad idea.
>
> But I can't even get things to begin to work, because I can't grok how
> the teaching languages are structured. How would I go about adding
> types and type checking (provided by Typed Scheme) to the language
> constructs of Beginning Student? I tried obvious things like changing
> scheme/base to typed-scheme in the htdp-beginner files, but I end up
> not being able to make the colon type annotation available and when I
> try to run programs I get errors saying that there are type
> annotations missing.
>
> David Van Horn provided me with some work he started on in this vein,
> but he was working with Advanced Student rather than Beginning and the
> internal structure of each of the teaching languages is so complicated
> that I can't tell which htdp-advanced's I can just replace with
> htdp-beginner's and which ones I have to reconstruct.
>
> Is there a document anywhere that describes how the teaching languages
> are built or is it all just in the code?
>
> Parenthetically, it's really hard to figure out where things are
> coming from as I'm trying to read through Scheme code without running
> Check Syntax and using Jump to Definition. Is this the normal state of
> Scheme coding or am I missing something that would make figuring out
> how the pieces fit together easier?
>
> Thanks,
> Todd
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme