caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: John Whitington <john@coherentgraphics.co.uk>
To: robert.muller2@gmail.com
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] teaching OCaml
Date: Tue, 25 Nov 2014 16:33:47 +0000	[thread overview]
Message-ID: <5474AF6B.407@coherentgraphics.co.uk> (raw)
In-Reply-To: <sympa.1416930229.15785.459@inria.fr>

Hi Bob,

robert.muller2@gmail.com wrote:
> Greetings. Bob Muller here, in the CS dept. at Boston College. I've set out to
> develop an intro CS course in ML that I hope will be well-suited for similar
> universities in the US. My original plan was to teach the course in SML but
> after talking with a few people at neighboring schools, I switched to OCaml. I
> am now in the final weeks of the first run of the course.  I plan to document
> my experience more fully at some point but I wanted to touch base with the
> OCaml community because I'm teaching the course again in the spring and I am
> leaning toward switching to F#.
>
> While OCaml has in many respects been great and it's easy to see that my
> students find the OCaml style of coding very compelling, there are significant
> problems. Of course, OCaml wasn't designed for teaching but I'm hoping that
> someone on this list might be able to advise me about solutions to some of
> these that I just don't know about.
>
> 1. Error messages: It's difficult to give good type errors for ML but I was
> hoping that the state-of-the-art of type error reporting had improved. When my
> students receive a type error, they are utterly mystified,

Arthur Chargueraud has done some work on this, by fixing up the error 
messages using an auxilliary typechecker. There is an OPAM compiler 
switch for it, I recall.

http://gallium.inria.fr/blog/making-it-easier-for-beginners-to-learn-ocaml/

I think it's very important for students to understand how to do a kind 
of mock type inference on paper or in their head. This helps a lot with 
understanding errors, though they will always happen, and the error 
messages are tough to begin with. For example, from the standard library:

let rec fold_left f accu l =
   match l with
     [] -> accu
   | a::l -> fold_left f (f accu a) l

1. Looking at the form of the first line, the type must have the form

... -> ... -> ... -> ...

2. Looking at lines 2 and 3, we know that l is a list, and that the 
final output has the same type as the 'accu' (assign it 'a):

... -> 'a -> ... list -> 'a

3. Look at the last line. Now we can see that f is a function, because 
it is applied, and we can see its first argument is the same type as 
'accu' too:

('a -> ... -> ...) -> 'a -> ... list -> 'a

Since 'accu' feeds back through the recursive call, 'f accu a' must have 
that  type too:

('a -> ... -> 'a) -> 'a -> ... list -> 'a

We have no information to show that the type of the list which 'a' comes 
from in 'f accu a' must be the same as 'a, so call it 'b:

('a -> 'b -> 'a) -> 'a -> 'b list -> a

If they can do that one, they can probably do most things that might 
appear in a beginners course.

I'm also strongly opposed to beginners being encouraged to use type 
annotations in code, which people sometimes do to get 'better' error 
messages. I think it confuses more than helps. But that seems to be a 
controversial opinion, from what I can tell.

> 2. GUIs: several of my problem sets work with simple graphics (e.g., rendering
> tessellations) or animations (e.g., a maze walk or a simplified form of
> tetris, or the game "Flow"). We have been hobbling along with the Graphics and
> Labltk modules for this but it has been more pain than my students ought to
> know. We also have some problem sets that work with audio so I would like
> support for that.

I wrote a version of Graphics which writes to PDF. If you have a PDF 
reader which re-renders when the file on disk is updated, this can be 
used for the non-interactive stuff, and it feels a bit more modern than 
the built-in graphics window.

https://github.com/johnwhitington/graphicspdf

You can get it in OPAM.

Thanks,

-- 
John Whitington
Director, Coherent Graphics Ltd
http://www.coherentpdf.com/


  reply	other threads:[~2014-11-25 16:33 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-25 16:03 robert.muller2
2014-11-25 16:33 ` John Whitington [this message]
     [not found]   ` <CAKmYinnv1arGZGQ2s0O7K2u=hr=oieiDXzR8YU_habM4+bUdJA@mail.gmail.com>
     [not found]     ` <5474C87D.4030307@coherentgraphics.co.uk>
2014-11-25 18:21       ` John Whitington
2014-11-26 14:26         ` Drup
2014-11-26 16:34         ` Xavier Leroy
2014-11-25 19:40 ` Daniel Bünzli
2014-11-26 11:37 ` Kenichi Asai
2014-11-26 18:12   ` Yaron Minsky
2014-11-26 22:09   ` Marek Kubica
2014-11-26 12:16 ` Jonathan Kimmitt
2014-12-16 19:17   ` Jon Harrop
  -- strict thread matches above, loose matches on Subject: below --
2014-11-25 16:43 Arthur Charguéraud
2014-11-25 17:27 ` Alain Frisch
2014-11-25 17:33   ` Arthur Charguéraud
     [not found] <16574.54515.560699.848619@gargle.gargle.HOWL>
2004-06-03 14:27 ` [Caml-list] Teaching OCaml Brian Hurt
2004-05-17 11:28 Simão Melo de Sousa
2004-05-17 17:27 ` Michael Hamburg
2004-05-17 17:40   ` David Brown
2004-05-18  8:52   ` Richard Jones
2004-06-02 17:41     ` Holger Schulz
2004-05-17 21:12 ` Evan Martin
2004-06-02 12:43 ` Holger Schulz
2004-06-02 13:06   ` Nicolas Cannasse

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5474AF6B.407@coherentgraphics.co.uk \
    --to=john@coherentgraphics.co.uk \
    --cc=caml-list@inria.fr \
    --cc=robert.muller2@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).