[plt-scheme] The perfect teaching language--Is this too much to ask for?

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Sat Jun 13 19:36:47 EDT 2009

On Jun 13, 2009, at 7:04 PM, Todd O'Bryan wrote:

> or am I still not correctly verbalizing/understanding what I'm  
> asking for?

You are but like a typical consumer and many computer scientists, you  
are proposing a solution instead of stating and describing the problem.

;; ---

1. We made the decision to go without static types for good reason.  
You don't want types (at the beginning).

2. What we call contracts in BSL and what we call contracts in PLT  
Scheme is only loosely related. So you don't want contracts either.

3. In the German version of HtDP, dubbed DeinProgram, you state HtDP- 
style contracts in a formal language and they are checked as your BSL/ 
ISL programs are run. It would cut down your students' 'debugging'  
time a lot. See DeinProgram in DrScheme, but you may need to know a  
bit of German.

4. We intend to support something like this sooner or later. Robby  
has been working on this since 2004.

5. I don't understand how your students can have test cases for each  
function and NOT see that their functions are producing the wrong  
things. Code excerpts would be helpful.

All in all you aren't asking for a perfect language. You're asking  
for very doable things. (Python's nonsense confused the heck out of  
you. Give up on it. Study ML and then jump to Cayenne. Students will  
never mistakes again, because they won't get any programs past the  
type checkers :-)

-- Matthias

;; ----

P.S. For your reading pleasure, a first draft of the proposed  
teachpack for providing type-of and friends:

#lang scheme

(require lang/prim)

(provide type-of)

;; Any -> Type
(define (type-of a)
     [(number? a) Number]
     [(string? a) String]
     [(boolean? a) Boolean]
     [(procedure? a) Procedure]
     [(type? a) Type]))

(define-syntax-rule (def-types type? Name ...)
   (begin (provide type? Name ...)
          (define (type? x)
            (member x (list Name ...)))
          (define Name (gensym 'Name))

(def-types type? Type Number String Boolean Procedure)

I took the liberty of writing a macro to define the types. You can  
define them one by one, w/i the BSL language!!!

Here is an interaction:

Welcome to DrScheme, version [3m].
Language: Intermediate Student.
This program should be tested.
 > (type-of 3)
 > (type-of cons)
 > (type-of true)
 > (type-of (type-of true))

Posted on the users mailing list.