- Comp.Lang.ML FAQ [Monthly Posting]

 Home >  Programming >

Comp.Lang.ML FAQ [Monthly Posting]

Section 1 of 2 - Prev - Next

Archive-name: meta-lang-faq
Last-modified: Mar 20, 2003

         COMP.LANG.ML Frequently Asked Questions and Answers 
	   (compiled by Dave Berry, Greg Morrisett and Rowan Davies)
           (maintained by Leaf Petersen) 

Please send corrections, additions, or comments regarding this list to  

Changes since last posting:
	- Added question on OCaml/SML comparison (Andreas Rossberg)
	- Updated ProofPower entry (Rob Arthan)
	- Changed link for Elementary Standard ML (Greg Michaelson)
	- Updated MLton entry (Stephen Weeks)	
	- Added entry on HaMLet (Andreas Rossberg)
	- Updated basis entry (Andreas Rossberg)
	- Added SML.Net (Andreas Rossberg)

	1. What is ML?
	2. Where is ML discussed?
		a. Comp.Lang.ML
	3. What implementations of ML are available?
		a. quick summary (by machine/OS)
 		b. Standard ML of New Jersey (SML/NJ)
		c. sml2c
		d. Caml Light
                e. Objective Caml
                f. Bigloo
                g. Camlot
		h. Moscow ML
		i. ML Kit
                j. Edinburgh
		k. MicroML
		l. Poly/ML
		m. Poplog ML
                n. MLWorks
                o. MLJ
                p. MLton
		q. HaMLet
        4. Unsupported SML/NJ Ports
		a. OS/2
 		c. SVR4
        5. Where can I find documentation/information on ML?
		a. The Definition
		b. Textbooks
		c. Information on the Internet
	6. Where can I find ML library code?
                a. The Standard ML ('97) Basis Library
		b. The Edinburgh SML Library
		c. The SML/NJ Library
		d. SML_TK
                e. Caml-light libraries
		f. The Qwertz Toolbox (for AI)
	7. Theorem Provers and ML
        8. Miscellaneous Questions
		a. How do I write the Y combinator in SML?
		b. Where can I find an X-windows interface to SML?
		c. How do I call a C function from SML/NJ?
		d. Where can I find an emacs mode for SML?
		e. What is the value restriction?
		f. What is the difference between OCaml and Standard ML?


0. Where can I find the latest copy of this FAQ?

  This document can be retrieved via anonymous ftp from
  or from  There is an HTTP version with active links at


1. What is ML?

  ML (which stands for Meta-Language) is a family of advanced programming 
  languages with [usually] functional control structures, strict semantics, 
  a strict polymorphic type system, and parametrized modules.  It includes 
  Standard ML, Lazy ML, CAML, CAML Light, and various research languages.  
  Implementations are available on many platforms, including PCs, mainframes,
  most models of workstation, multi-processors and supercomputers.  ML has 
  many thousands of users, is taught at many universities (and is the first
  programming language taught at some).


2. Where is ML discussed?

------------ is a moderated usenet newsgroup.  The topics for discussion
include but are not limited to:

   * general ML enquiries or discussion 
   * general interpretation of the definition of Standard ML 
   * applications and use of ML 
   * announcements of general interest (e.g. compiler releases)
   * discussion of semantics including sematics of extensions based on ML
   * discussion about library structure and content
   * tool development
   * comparison/contrast with other languages
   * implementation issues, techniques and algorithms including extensions
     based on ML

Requests should be sent to:

Administrative mail should be sent to:

Messages sent to the newsgroup are archived at CMU.  The archives can be
retrieved by anonymous ftp from internet sites.  Messages are archived
on a year-to-year basis.  Previous years' messages are compressed using
the Unix "compress" command.  The current year's messages are not

	username: anonymous
	password: @
	cd /usr/rowan/sml-archive
	get sml-archive..Z
	zcat sml-archive..Z

(Pop's IP address is

Individual messages can also be accessed in the directories

The SML-LIST is a mailing list that exists for people who cannot
(or do not want to) read the Usenet COMP.LANG.ML newsgroup. 
Messages are crossposted from COMP.LANG.ML to the SML-LIST and
vice-versa.  You should ask to join the SML-LIST _only if_ you cannot
(or do not want to) read the Usenet COMP.LANG.ML newsgroup.

To send a message to the SML-LIST distribution, address it to:

(sites not connected to the Internet may need additional routing.)

Administrative mail such as requests to add or remove names from the
distribution list should be addressed to

The Caml language, a dialect of ML, is discussed on the Caml mailing
list.  To send mail to the Caml mailing list, address it to:

Administrative mail should be addressed to:

No longer used.


3. What implementations of ML are available and where can I find them?

Quick Summary:

System	full SML?  contact	  		          Platforms
------	---------  ------------		         ------------------------------
SML/NJ	   yes 

						Alpha - OSF/1 3.2, DUX 4.0
						Mips - Irix 4.0.x, 5.x, 6.x
						x86 - Linux, Solaris, FreeBSD, 
						  NetBSD, Windows95, WindowsNT	
						Sparc - SunOS, Solaris
						RS/6000 - AIX
						PowerPC - AIX
						HPPA - HPUX 10

sml2c	   yes					 32-bit Unix machines (C code)

Caml Light coreish		 Unix, Mac, PC 80386,
		   ftp		 (bytecode)

Objective  own		 Unix and Windows NT/95
  Caml    modules  ftp              (bytecode)
                                                 Alpha, Sparc, x86, Mips,
                                                 HPPA, Power (native code)

Bigloo    coreish      Unix (compiles caml-light 
                   ftp                    to native code)

Camlot    coreish          Any 32-bit (compiles
                   ftp                    caml-light to C)

Moscow ML  yes		 

						Intel- Windows,OS/2,Linux,FreeBSD
						Alpha - DUX
						Sparc - Solaris,SunOS
						HP9000 - UX 9,UX 10
						SGI MIPS - IRIX 5
						Mac(68k and PPC) 
						  - MacOS,MkLinux,
						    MacOS X

Kit	   yes	   ftp		 (Requires another SML compiler
		   ftp		 to build binaries)

Edinburgh  core	         32-bit machines (bytecode)  PC 80386SX+, Amiga

MicroML    core      PC 8086+ (bytecode)

Poly/ML	   SML 97         Intel - Linux, Windows
						 Sparc - Solaris
						 Mac   - MacOS X

PoplogML   yes                 Sparc/Solaris, Intel/Solaris,
                                                 Intel/Linux, PowerPC/AIX,
                                                 Alpha/DUX, Intel/Windows

MLWorks    No longer available

MLJ        core+		 Unix and Windows NT/95
           SML'97                                Alpha, Sparc, x86
             (Compiles to JVM)

MLton      yes                  x86 Linux, FreeBSD, Cygwin

HaMLet     yes  N/A

SML.NET    yes
                             (Targets the Common Language Runtime)


Standard ML of New Jersey
Standard ML of New Jersey (SML/NJ) was developed jointly at Bell
Laboratories, Princeton University, and recently Yale University.  The
SML/NJ distribution includes CM (a separate compilation manager),
ML-Yacc, ML-Lex, ML-Burg, the SML/NJ Library, Concurrent ML, eXene
(a multithreaded X-windows toolkit), and the SML/NJ-C interface
library.  The software is available with source code under a very
liberal license.

Version 110 of SML/NJ (released in February 1998), is largely
compliant with the new SML '97 Definition, including the new Basis

Version 110 runs on the following machine/os configurations:

    Alpha	OSF/1 3.2, Digital Unix 4.0
    Mips	Irix 4.0.x, Irix 5.x, Irix 6.x
    x86		Linux, Solaris, FreeBSD, NetBSD, Windows95, WindowsNT
    Sparc	SunOS, Solaris
    RS/6000	AIX (also PowerPC)
    HPPA	HPUX 10

For the time being, Macintosh users will have to stick with the
previous release, Version 0.93.  New ports to MacOS and Rhapsody on
PowerPC are planned, and there may also be support for BeOS on PowerPC
and Intel.

The SML/NJ Version 110 software distribution is available at:

    Bell Labs:

or through the SML/NJ web site at:

This web site also has extensive online documentation and links to
related sites.

Another important link is the documentation for the SML '97 Basis, which
can be found at:

sml2c is a Standard ML to C compiler.  It is based on an old
version of SML/NJ from 1992 and shares its front-end and most of the
runtime system. sml2c is a batch compiler and compiles only module-level
declarations.  It does not support SML/NJ style debugging and profiling.

sml2c is easily portable and has been ported to IBM RT, 
Decstation 3100, Decstation 5000, Omron Luna 88k, sun-3, sun-4 and a 
486-based machine (running Mach).  The generated code is highly portable 
and makes very few assumptions about the target machine or the C compilers 
available on the target machine. The runtime system, which it shares with 
the SML/NJ has several machine and operating system dependencies.  sml2c 
has eliminated some of these dependencies by using portable schemes for 
garbage collection and for freezing and restarting programs.

sml2c is available by anonymous ftp from
( Log in as anonymous, send username@node as password.
The distribution can be found in /afs/cs/project/mess/research/sml2c/ftp.
The local ftp software will allow you to change directory only
to /afs/cs/project/mess/research/sml2c/ftp.  The README file in this
directory describes the files in the distribution.
The size of the uncompressed distribution is about 12 Meg.

Caml Light is a portable, bytecode interpreter for CAML, a dialect of ML.
Some features of Caml Light include separate compilation, streams and
stream parsers, ability to link to C code, and a fairly rich library.
The implementation has low memory requirements, compiles quickly and
generates compact executables. 

The Caml Light system comprises a batch compiler, a toplevel-based
interactive compiler, tools for building libraries and toplevel
systems, a replay debugger, and a hypertext-based module browser.

Caml Light runs on most modern Unix machines, including Sun
Sparcstations (under SunOS 4.1 and Solaris 2), Decstations 3000
(Alpha) and 5000 (Mips), and PCs under Linux, but many more machines
have been reported to work. It is also available for the Macintosh (as
a "fat binary" that runs native on PowerMacs) and the PC under
MS Windows and MSDOS.

The current version is 0.73, released in January 1997. It is available by
anonymous ftp from:

    host:     (
    directory:      lang/caml-light

Summary of the files:            More detailed summary
     cl73unix.tar.gz      Unix version (source code)
     cl73macbin.sea.bin   Binaries for the Macintosh version
     cl73win.exe          Binaries for MS Windows and MSDOS
     cl73refman.*         Reference manual, in various formats
     cl73tutorial.*       Tutorial, in various formats
     cl73macdoc.sea.bin   On-line documentation for the Macintosh version
     cl73macsrc.sea.bin   Source code for the Macintosh version

More information on Caml Light is available on the Web at:

The implementors can be contacted at  General
questions and comments of interest to the Caml community should be
sent to, the Caml mailing list. (see question 2
above for details.)

Objective Caml (formerly known as Caml Special Light) is a complete
reimplementation of Caml Light that adds a complete class-based
object-oriented system and a powerful module system in the style of
Standard ML.

The object system is statically type-checked (no "message not
understood" run-time errors) and performs ML-style type reconstruction
(no type declarations for function parameters). This is arguably the
first publically available object-oriented language featuring ML-style
type reconstruction.

The module system is based on the notion of manifest types /
translucent sums; it supports Modula-style separate compilation, and
fully transparent higher-order functors.

Objective Caml comprises two compilers: a bytecode compiler in the
style of Caml Light (but up to twice as fast), and a high-performance
native code compiler for the following platforms:

    Alpha processors: DecStation 3000 under OSF1 (a.k.a. Digital Unix)
    Sparc processors: Sun Sparcstation under SunOS 4.1, Solaris 2, NetBSD
    Intel 486 and Pentium processors: PCs under Linux, NextStep,
        FreeBSD, Windows 95 and Windows NT
    Mips processors: DecStation 3100 and 5000 under Ultrix 4
    HP PA-RISC processors: HP 9000/700 under NextStep (no HPUX yet)
    PowerPC processors: IBM RS6000 and PowerPC workstations under AIX 3.2

The native-code compiler delivers excellent performance (better than
Standard ML of New Jersey 1.08 on our tests), while retaining the
moderate memory requirements of the bytecode compiler.

The source distribution (for Unix machines only) is available by
anonymous FTP on, directory lang/caml-light.

More information on Objective Caml is available on the World Wide
Web, at:

Bug reports and technical questions should be directed to For general questions and comments, use the Caml
mailing list (to subscribe:

Bigloo is an optimizing Scheme-to-C and Caml-to-C compiler that
produces native machine code from Caml sources. Compatibility with the
bytecoded implementation of Caml Light is almost perfect. Performance
of generated code is on a par with that of New Jersey ML. Bigloo is
also one of the most efficient Scheme compilers available.

Bigloo runs on the following Unix platforms: Decstations 3000 and
5000, Sparcstations, PCs under Linux, HP PA 730 and Sony News R3000.

Bigloo is being developed by Manuel Serrano (

Available from:*.tar.gz.

Camlot is the stand alone Caml Light to C compiler. It then uses a standard C
compiler to produce an executable machine code file. The compiler itself is
mostly written in Caml Light and the runtime system is written in standard C,
hence Camlot is easy to port to almost any 32-bit platform. The performance 
of the resulting code is quite good, often ten times faster than the bytecode
original implementation of Caml Light.

The distribution has been tested on the following platforms:

  Sun Sparcstation
  DecStation 3100
  HP 9000/710
  i386/486 Linux

The distribution is avaiable at:

Moscow ML provides a light-weight implementation of full Standard ML,
including Modules and some extensions.

Moscow ML is based on the Caml Light bytecode system, which gives fast
compilation and modest storage consumption.

Moscow ML 2.00 properties:

  * Supports the full SML'97, including Modules (structures, signatures, 
    and functors), thanks to Claudio Russo
  * Also provides several extensions to the SML Modules language:
     - higher-order functors: functors may be defined within structures 
       and functors
     - first-class modules: structures and functors may be packed and 
       then handled as Core language values, which may then be unpacked 
       as structures or functors again
     - recursive modules: signatures and structures may be recursively 
  * Implements Standard ML, as revised 1997 (value polymorphism, 
    default overloading resolution, new types)
  * Remains backwards compatible with previous releases of Moscow ML
  * Implements most of the new Standard ML Basis Library, including
    the most common input/output facilities in TextIO and BinIO
  * Built-in help function
  * Interactive top-level as well as separate (batch) compilation
  * Can produce compact stand-alone executables
  * Supports quotations and antiquotations, useful for metaprogramming
  * Dynamic linking of external functions (Linux/x86 and Linux/Alpha, 
    Solaris, Digital Unix, HP-UX, MacOS, Win'95/98/NT/2000)
  * Interface to Boutell's library for making PNG images (structure Gdimage)
  * Interface to the PostgreSQL database server (structure Postgres)
  * Interface to the MySQL database server (structure Mysql)
  * Interface to POSIX 1003.2 regular expressions (structure Regex)
  * Interface to sockets (structure Socket)
  * Interface to GNU gdbm persistent hashtables (structures Gdbm, Polygdbm)
  * Facilities for fast functional generation of HTML code (structure Msp)
  * Facilities for using CGI (structure Mosmlcgi and Mosmlcookie)
  * Registration of ML and C functions for callbacks (structure Callback)


Intel x86-based PCs running Windows'95, '98, 'NT, and '2000, OS/2,
Linux or FreeBSD; DEC Alpha running Linux or Digital Unix; Sun Sparc
running Solaris or SunOS; HP9000 running HP/UX 9 or HP/UX 10; SGI MIPS
running IRIX 5; Macintosh (68k and PPC) running MacOS (thanks to Doug
Currie) or MkLinux, MacOS X.


  * Sergei Romanenko (, Moscow, Russia
  * Claudio V. Russo (, Cambridge, UK
  * Peter Sestoft (, Copenhagen, Denmark


  * The Moscow ML homepage is
  * Moscow ML library documentation
  * The Linux executables and documentation are in
  * The Unix source files and documentation are in
  * The MS Windows 95/98/NT executables and documentation are in
  * The MacOS (68k and PPC) executables and docs and source diffs are in
  * The MS Windows 95/98/NT/2000 source files are in

Postscript and PDF versions of the documentation included with the
binaries can be found in

Peter Sestoft ( 2000-08-03

The ML Kit
Two versions of the ML Kit are available from DIKU: 
(a) The ML Kit (Version 1, 1993)
(b) The ML Kit with Regions (1997)

Both are described in more detail at the DIKU ML Kit web site:

ML Kit Version 1
Version 1 of the ML Kit is a straight translation of the 1990
Definition of Standard ML into a collection of Standard ML modules.
For example, every inference rule in the Definition is translated into
a small piece of Standard ML code which implements it. The translation
has been done with as little originality as possible - even variable
conventions from the Definition are carried straight over to the Kit.

If you are primarily interested in executing Standard ML programs
efficiently, the ML Kit is not the system for you! (It uses a lot of
space and is very slow.) The Kit is intended as a tool box for those
people in the programming language community who may want a
self-contained parser or type checker for full Standard ML but do not
want to understand the clever bits of a high-performance compiler. We
have tried to write simple code and module interfaces; we have not
paid any attention to efficiency.

The documentation is around 100 pages long and is provided with the
Kit. It explains how to build, run, read and modify the Kit. It also
describes how typing of flexible records and overloading are handled
in the Kit.

The ML Kit is written by Nick Rothwell, David N. Turner, Mads Tofte
and Lars Birkedal at Edinburgh and Copenhagen Universities.
The ML Kit with Regions (aka Version 2)
Version 2 builds on Version 1, but is expanded into a real compiler.
Inefficient data structures and algorithms in the system have been
replaced by more efficient ones. The ML Kit with Regions is intended for
the development of stand-alone applications which must be reliable,
fast and space efficient.

The main feature of the ML Kit with Regions is that it uses a stack of
regions for memory management rather than traditional garbage
collection techniques; this has several important consequences:

   Compile-Time Garbage Collection: 
     All memory allocation directives (both allocation and
     de-allocation) are inferred by the compiler, which uses a number
     of novel program analyses concerning lifetimes and storage
     layout. There is no pointer-tracing garbage collection at
   Memory Safety: 
     Safety of de-allocation of memory is ensured by the compiler; 
   Static detection of space leaks; 
   Region Resetting: 
     It is possible to give explicit directives about resetting of
     regions in cases where the static analyses are too conservative;
     such directives are checked by the compiler;
   Region Profiling: 
     The system includes a graphical region profiler, which helps
     gain detailed control over memory use; 
   Soft Real-Time: 
     Programmers who are interested in real-time programming can
     exploit the absence of garbage collection: there are no
     interruptions of unbounded duration at runtime;
   Interface to the C language: 
     ML Kit applications can call C functions using standard C calling
     conventions; the region scheme can even take care of allocating
     and de-allocating regions used by C functions thus invoked.

The overall goal with developing the ML Kit with Regions has been to
combine the advantages of a high-level, type-safe language (Standard
ML, 1997 Definition), with the advantages of low-level languages,
namely detailed control over space and time. Indeed, it turns out that
the regularity provided by the ML type system makes is possible to
infer much more useful information about ML programs than one can
reasonably hope for in languages with more liberal type
systems. Naturally, the hope is that this technology will promote the
use of Standard ML in situations where safety and detailed control of
machine resources are important, as indeed is often the case.

Since we are using Standard ML as our source language, one can use the
ML Kit in conjunction with other Standard ML systems; for example, one
can port programs that previously ran on a garbage collection based
Standard ML system to run on the Kit; or one may use the Kit simply to
gain insight into how a program intended for another system uses
memory; or one can develop Standard ML programs directly in the Kit.
We have tried all three with good results.

A comprehensive technical report "Programming with Regions in the ML Kit"
is available from the above web site.

The ML Kit with Regions was developed by Mads Tofte, Lars Birkedal,
Martin Elsman, Niels Hallenberg, Tommy H{\o}jfeld Olesen (all at DIKU) and
Peter Sestoft and Peter Berthelsen (both at KVL).

Edinburgh ML 4.0
Edinburgh ML 4.0 is an implementation of the core language (without
the module system).  It uses a bytecode interpreter, which is written in C
and runs on any machine with 32 bit words, a continuous address space and
a correct C compiler.  Ports to various 16 bit machines are underway.  The
bytecode interpreter can be compiled with switches to avoid the buggy parts
of the C compilers that we've used it with (as far as I know none of them
worked correctly).  

Edinburgh ML 4.0 is available from the LFCS.  See the WWW link:

A port to PCs with 386SX processors or better is available by FTP from, in the file
Contact Joern Erbguth ( for more information.

Also, there are apparently 8086 and 80386-specific ports of Edinburgh
ML 3.5 in the same location.  The 386 port is in the file

There are other Edinburgh (PC-)ports of ML including an OS/2 2.x, an
OS/2 PM and a Dos version. A new version has just been made ready and
is available at ( in
pub/ibmpc/os2/lang/sml/ It is about 360K long (short?).

	All 3 programs have in common (all in one .zip):
	   - true 32 Bit applications
	   - easy to install, easy to use
	   - As far as I know they work stable
	     (except the DOS version working as a Windows window
	     [you can use it with Windows but it crashes on *exit*])
	   - they don't require expensive hardware 
	     (and they don't need a co-processor)

	To be more specific:
	      OS/2 PM               OS/2                DOS	
	OS    >= OS/2 2.0+ServPak   >= OS/2 2.0		>= DOS 5.0
	Edit  PM, GUI,              Standard            command history
	      integrated editor
	HW    >= 386/33, 8MB        >= 386/33 4MB       >= 386sx, 2MB
	      lots of MB and fast
	      graphics ad. recommended
	Help  online                online
	      (+ML ref. in german)

There's also an amiga port of Edinburgh ML available on all aminet ftp
sites (amiga users should know which these are) in dev/lang, called
"sml4.1.02.lha".  The standard version needs a 68020 or better and an
FPU but there is a 68000-only version as well.

MicroML is an interpreter for core SML that runs on IBM PCs,
from the Department of Computing Science at the Umea University in
Sweden.  It implements the core language except for records.  A 80286
processor or better is recommended, but it runs even on a 8086. 

MicroML is available by anonymous ftp from /pub/uml022.zoo.  For more information contact Olof Johansson

Poly/ML, probably the longest established implementation of Standard ML,
is now available at .

Poly/ML was originally written in the mid-eighties at Cambridge
University.  For several years it was marketed by Abstract Hardware
Limited who developed it further.  Recently the rights were reacquired
by Cambridge University Technical Services who have agreed to make
Poly/ML freely available.  Poly/ML now supports full SML 97 and the
Standard Basis Library, along with some non-standard extensions.
According to the web page, the compiler source is available, as well
as binary releases.

Poly/ML is currently available for Linux and Windows on Intel
platforms, Sparc/Solaris, and MacOS X. Measurements with several large
ML applications shows Poly/ML to be one of the fastest implementations
of Standard ML around.

Poplog ML
Poplog is a portable system including incremental compilers for Pop-11,
Common Lisp, Prolog and Standard ML, along with a huge amount of system
documentation, teaching materials for AI/Cognitive Science, the
Sim_agent Toolkit, vision libraries, and other things.

"Poplog" is a trade mark of the University of Sussex, where most
of Poplog was developed, starting with Pop-11 on a PDP11/40 computer
in the mid 70s, inspired by the Edinburgh AI language Pop2.

The full Poplog system (as of version 15.53) is available free of
charge, including source code.

For more information, see

For information about the free versions available, and various teaching
and research support libraries for AI see:

This includes versions of Poplog V15.53 for

    Solaris+Sparc (works on Solaris 7 as well as earlier versions)
    PC Linux (RedHat 5.x, and 6.0) with or without motif

There are slightly older versions for
    Dec Alpha + Digital unix

Reduced version (no graphics, nothing that depends on X)
    PC+Windows95/98 (may work on NT also?)

Poplog comes with masses of online documentation: this can be browsed at

Pop-11 documentation can be found at

A slightly zany tutorial file on story grammars can be read in

Comments and questions about Poplog and Pop-11 may be posted to the
comp.lang.pop newsgroup, which is linked to an email list.

(Please do NOT post general conference announcements, advertisements,

Adrian John Howard ( has a WWW page for Poplog:

Harlequin MLWorks

Harlequin MLWorks is no longer available as a commercial product.

MLj is a Standard ML compiler which produces Java bytecodes. 

MLj 0.2 compiles the functor-free subset of the new SML'97 language plus

Section 1 of 2 - Prev - Next

Back to category Programming - Use Smart Search
Home - Smart Search - About the project - Feedback

© | Terms of use