Newsgroups: comp.lang.ml,comp.answers,news.answers Path: bloom-beacon.mit.edu!hookup!europa.eng.gtefsd.com!fs7.ece.cmu.edu!honeydew.srv.cs.cmu.edu!jgmorris From: jgmorris@cs.cmu.edu (Greg Morrisett) Subject: Comp.Lang.ML FAQ [Monthly Posting] Message-ID: Followup-To: poster Summary: This posting contains a list of Frequently asked questions (and their answers) about the family of ML programming languages, including Standard ML, CAML, Lazy-ML, and CAML-Light. This post should be read before asking a question on the comp.lang.ml newsgroup. Originator: jgmorris@VACHE.VENARI.CS.CMU.EDU Sender: jgmorris@cs.cmu.edu Nntp-Posting-Host: vache.venari.cs.cmu.edu Reply-To: comp-lang-ml-request@cs.cmu.edu Organization: School of Computer Science, Carnegie Mellon Date: Thu, 21 Apr 1994 14:57:16 GMT Approved: comp-lang-ml@cs.cmu.edu Expires: Sat, 21 May 1994 00:00:00 GMT Lines: 940 Xref: bloom-beacon.mit.edu comp.lang.ml:444 comp.answers:5006 news.answers:18361 Archive-name: meta-lang-faq Last-modified: 1994/03/18 COMP.LANG.ML Frequently Asked Questions and Answers (compiled by Dave Berry and Greg Morrisett) Please send corrections, additions, or comments regarding this list to comp-lang-ml-request@cs.cmu.edu. Changes since last month: ------------------------ Contents: --------- 1. What is ML? 2. Where is ML discussed? a. Comp.Lang.ML b. SML-LIST c. CAML-LIST 3. What implementations of ML are available? a. quick summary (by machine/OS) b. Poly/ML c. Standard ML of New Jersey d. Poplog ML e. ANU ML f. MicroML g. sml2c h. Caml Light i. ML Kit Compiler 4. Unsupported SML/NJ Ports a. MS-DOS/Windows b. Linux c. OS/2 5. Where can I find documentation on ML? a. The Definition b. Textbooks 6. Where can I find ML library code? 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. How do I fix the emacs mode to work with emacs 19? -------------------------------------------------------------------------- 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? COMP.LANG.ML ------------ comp.lang.ml 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: comp-lang-ml@cs.cmu.edu Administrative mail should be sent to: comp-lang-ml-request@cs.cmu.edu 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 compressed. ftp pop.cs.cmu.edu username: anonymous password: @ binary cd /usr/jgmorris/sml-archive get sml-archive..Z quit zcat sml-archive..Z (Pop's IP address is 128.2.205.205). Individual messages can also be accessed in the directories /usr/jgmorris/mh-sml-archive/-sml. SML-LIST -------- 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: sml-list@cs.cmu.edu (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 sml-list-request@cs.cmu.edu CAML-LIST --------- 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: caml-list@margaux.inria.fr Administrative mail should be addressed to: caml-list-request@margaux.inria.fr ALT.LANG.ML ----------- Another venue for ML-related discussion is the Netnews group alt.lang.ml, though this has seen relatively little traffic. -------------------------------------------------------------------------- 3. What implementations of ML are available and where can I find them? (Note, this information may be out of date.) Quick Summary: System full SML? contact Platforms ------ --------- ------------ ------------------------------ Poly/ML yes ahl@ahl.co.uk SPARC/SUNOS, SPARC/Solaris SML/NJ yes dbm@resarch.att.com Unix/Sparc,Mips,Vax,680x0, ftp research.att.com I386/486,HPPA,RS/6000, MacOS/MacII ftp.rz.uni-karlsruhe.de Linux (including binaries) ftp-os2.nmsu.edu OS/2 (including binearies) PoplogML yes isl@integ.uucp, VMS/Vax, Unix/Vax,Suns,Sparcs, alim@uk.ac.sussex.cogs, Solbourne, Sequent Symmetry, pop@cs.umass.edu HP M680?0, Apollo, AUX/MacII Edinburgh core ftp ftp.dcs.ed.ac.uk 32-bit machines (bytecode) ftp ftp.informatik.uni-muenchen.de PC 80386SX+ ANU ML core mcn@anucsd.anu.edu.au Sun-3, Ultrix/Vax, Pyramid, AUX/MacII MicroML core olof or mahler @cs.umu.se PC 80286+ (bytecode) ftp ftp.cs.umu.se sml2c yes dtarditi@cs.cmu.edu 32-bit Unix machines (C code) ftp dravido.soar.cs.cmu.edu Caml Light coreish caml-light@margaux.inria.fr 32-bit Unix, Mac, PC 8086, ftp ftp.inria.fr PC 80386 (bytecode) Kit yes ftp ftp.diku.dk (Requires another SML compiler ftp ftp.dcs.ed.ac.uk to build binaries) Details: Poly/ML: Poly/ML produces native code for SPARC systems under either SUNOS (4.1) or Solaris (2.3). A PC version is currently under development. Poly/ML uses a persistent store and supports arbitrary precision integer arithmetic. The Motif Edition of Poly/ML comes with a make system, an X11/Xlib interface, and a OSF/Motif interface. Non-standard extensions include concurrent processes and an associated message-passing scheme. Poly/ML is a commercial product from Abstract Hardware Ltd. (ahl@ahl.co.uk). The price of the Motif edition is 1250 pounds for an academic site licence or 3500 pounds per machine for commercial users. Multiple and site licences are available by negotiation. Standard ML of New Jersey: Standard ML of New Jersey was developed jointly at AT&T Bell Laboratories and Princeton University. It is an open system (source code is freely available) implemented in Standard ML. Version 0.93 of SML/NJ generates native code for 68020, SPARC, and MIPS (big and little endian), I386/486, HPPA(HP9000/700), and RS/6000 architectures under various versions of the Unix operating system (SunOS, Ultrix, Mach, Irix, Riscos, HPUX, AIX, AUX, etc.), and on the MacIntosh OS (Mac II, System 7.x, min 12MB ram). Version 0.75 runs on the Vax under Ultrix, BSD, and Mach. SML/NJ comes with a source-level debugger, profiler, gnu emacs interface, ML implementations of LEX, YACC, and Twig, separate compilation facilities, Concurrent ML, the eXene X Window library, and the SML/NJ library. It runs interactively and can produce stand-alone executable applications. Non-standard extensions include typed first-class continuations, Unix signal handling, and higher-order functors. SML/NJ is copyrighted by AT&T but the system, including source code, is freely distributable. It is available by anonymous ftp from research.att.com (192.20.225.2) and princeton.edu (128.112.128.1). Login as "anonymous" with your user name as password. Put ftp in binary mode and copy the (compressed tar) files you need from the directory dist/ml (pub/ml on princeton.edu). You only need the 93.mo.*.tar.Z files for your machine in addition to the 93.src.tar.Z. (You might also want the 93.release-notes.[ps|txt], 93.tools.tar.Z, 93.doc.tar.Z, and smlnj-lib-0.2.tar.Z files.) Alternatively mail dbm@research.att.com. In the UK, SML/NJ is available from the LFCS. There are unsupported ports of SML/NJ to other platforms, including Linux, FreeBSD, OS/2, and Microsoft Windows 3.1. See the "Unsupported SML/NJ Ports" section for details. Poplog ML: Standard ML is supported as part of the Poplog system, which also provides incremental compilers for Pop-11, Common Lisp and Prolog in a common environment with shared data-structures, so that mixed language programming is possible. The integrated editor and HELP mechanism support online teaching aids. Poplog comes with an X Windows interface. Poplog is available for VAX+VMS, VAX+Ultrix, VAX+Bsd 4.2/3, Sun-2,3,4, Sun386i, SPARCstation, Solbourne, Sequent Symmetry (with Dynix), HP M680?0+Unix workstations and Apollo+Unix. Versions for MAC-II with A/UX, DECstation 3100 and MIPS will be available shortly. UK educational users should contact the School of Cognitive and Computing Sciences, University of Sussex (alim@uk.ac.sussex.cogs). People in the USA or Canada should contact Computable Functions Inc. (pop@cs.umass.edu). All others should contact Integral Solutions Ltd. (isl@integ.uucp). UK academic prices start at 600 pounds. Non-UK academic prices start at 1125 pounds. Commercial prices start around 2,000 pounds for an ML-only version or 7,500 pounds for the full Poplog system. 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. A port to PCs with 386SX processors or better is available by FTP from ftp.informatik.uni-muenchen.de, in the file pub/sml/ibmpc/edml3864.exe. Contact Joern Erbguth (jnerbgut@cip.informatik.uni-erlangen.de) for more information. Some information from Felix von Normann follows: 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 forwiss.uni-passau.de (132.231.1.10) in pub/ibmpc/os2/lang/sml/sml04.zip. 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 (cut&paste) HW >= 386/33, 8MB >= 386/33 4MB >= 386sx, 2MB lots of MB and fast graphics ad. recommened Help online online (+ML ref. in german) ANU ML ANU ML is descended from Cardelli's ML Pose 3. It implements the core language of the standard and an old version of modules. It incrementally compiles to native code on Sun-3, Vax/Ultrix, Pyramid and MacII/AUX. (It is intended to standardize modules and do the port to Sun-4 in the near future.) ANU ML has a program development system with strong support for debugging (tracing, automatic retesting etc.) and has been extended with a built-in type complex. ANU ML is still considered to be in beta release since exceptions have been standardized quite recently. It is available from Malcolm Newey, CS Dept., Australian National University (mcn@anucsd.anu.edu.au) by arrangement; soon to be available by ftp. MicroML MicroML is an interpreter for a subset of SML that runs on IBM PCs, from the Institute of Information Processing at the University of Umea in Sweden. It implements the core language except for records. A 80286 processor or better is recommended. MicroML is available as an alpha-release by anonymous ftp from ftp.cs.umu.se /pub/umlexe01.uue. There are several known bugs in the current version. For more information contact Olof Johansson (olof@cs.umu.se) or Roger Mahler (mahler@cs.umu.se). sml2c sml2c is a Standard ML to C compiler. It is based on SML/NJ 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 dravido.soar.cs.cmu.edu (128.2.220.26). Log in as anonymous, send username@node as password. The compressed tar file sml2c.tar.Z can be found in /usr/nemo/sml2c. The local ftp software will allow you to change directory only to /usr/nemo/sml2c. The size of the tar file is about 3 Meg. The size of the uncompressed distribution is about 12 Meg. Caml Light Caml Light is a portable, bytecode interpreter for a subset of CAML, a dialect of ML. Some features of Caml Light include separate compilation, streams and stream parsers, ability to link to C code, and tools for building libraries and toplevel systems. The PC versions provide line editing and the 80386 port is VCPI-compliant. The Unix version should work on any modern workstation. We have tested it on Sun 3 and 4, DecStations, HP 9000/700 and 9000/350, IBM RS/6000, SGI Indigo, Sony News, Next cubes, and some more exotic machines. The Macintosh version is now a standalone Macintosh application, and no longer requires the Macintosh Programmer's Workshop. (Well, at least for the toplevel environment; the batch compilers still run under MPW.) The application provides some graphics primitives. The PC version still comes in two flavors, one that run on any PC, but is severely limited by the 640K barrier, and one that run on 80386 or 80486 PC's in 32 bit protected mode to circumvent these limitations. Both versions now provide the same graphics primitives as the Macintosh version. Ports to OS/2 and to the Amiga are in progress. The version 0.6 of the Caml Light system has been released, and is available by anonymous FTP from: host: ftp.inria.fr (192.93.2.54) directory: lang/caml-light Summary of the files: README More detailed summary cl6unix.tar.Z Unix version cl6macbin.sea.hqx Binaries for the Macintosh version cl6macsrc.sea.hqx Source code for the Macintosh version cl6pc386bin.zip Binaries for the 80386 PC version cl6pc386src.zip Source code for the 80386 PC version cl6pc86bin.zip Binaries for the 8086 PC version cl6pc86src.zip Source code for the 8086 PC version cl6refman.* Reference manual, in various formats cl6tutorial.* Tutorial, in various formats This release is mostly a bug-fix release and should be compatible with Caml Light 0.5. The main changes are: * Better handling of type abbreviations. * Debugging mode (option -g to camlc and camllight) to get access to the internals of module implementations. * New library modules: genlex generic lexical analyser set applicative sets over ordered types map applicative maps over ordered types baltree balanced binary trees over ordered types * "compile" command at toplevel (especially useful in the Macintosh version). * New contributed libraries and tools: camlmode Emacs editing mode for Caml Light mletags Indexing of Caml Light source files for use with Emacs "tags" search_isos Search libraries by types (modulo isomorphisms) libgraph X implementation of the portable graphics library libnum Arbitrary-precision arithmetic libstr String operations, regular expressions * The 80386 PC version is now DPMI-compliant, hence it can run under Windows (in text mode inside a DOS windows and with no graphics, though). * More examples, including those from the book "Le langage Caml". General questions and comments of interest to the Caml community should be sent to caml-list@margaux.inria.fr, the Caml mailing list. (see question 3 above for details.) ML Kit Compiler The ML Kit is a straight translation of the 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 is available via anonymous ftp. Here is a sample dialog: ftp ftp.diku.dk ftp ftp.dcs.ed.ac.uk Name: anonymous Name: anonymous Password: Password: ftp> binary ftp> binary ftp> cd diku/users/birkedal ftp> cd export/ml/mlkit ftp> get README ftp> get README ftp> get COPYING ftp> get COPYING ftp> get src.tar.Z ftp> get src.tar.Z ftp> get doc.tar.Z ftp> get doc.tar.Z ftp> get tools.tar.Z ftp> get tools.tar.Z ftp> get examples.tar.Z ftp> get examples.tar.Z ftp> bye ftp> bye The file README contains installation instructions. Note that no binaries are distributed and that you must build these using either Standard ML of New Jersey, or Poly/ML. -------------------------------------------------------------------------- 6. Unsupported SML/NJ Ports This section describes various ports of SML/NJ (see section 5) that are not directly supported by the NJ folks. MS-DOS/Windows? --------------- (From Dave MacQueen) There is an MS-Windows/MSDOS implementation of Standard ML of New Jersey available by annonymous ftp on research.att.com, directory dist/ml/working/sml-386. This port was done by Yngvi Guttesen at the Danish Technical University in Copenhagen, and it is based on version 0.75 of SML/NJ. The distribution consists of the following four files. -rw-rw-r-- 1 dbm other 417 Feb 16 1993 README -rw-rw-r-- 1 dbm other 51375 Feb 7 1992 doc.tar.Z -rw-rw-r-- 1 dbm other 749105 May 5 1992 mo.386.tar.Z -rw-rw-r-- 1 dbm other 851445 Feb 7 1992 src.tar.Z This Windows port is rather delicate, and when we got it we had a lot of trouble getting it working here at Bell labs. We tried several different machines and finally found one on which it would run (a Gateway 2000 with 16 MB of RAM), though even then it was not very robust or fast. It seemed to be a problem of finding a machine with just the right memory management configuration. I must admit that memory management under Windows is a black art that I am not familiar with, so I have no idea how to characterize the required memory configuration. My conclusion is that the current Windows 3.1/MSDOS environment is so difficult that it would require a major additional investment to have a really useful port. Guttesen did not have a 32 bit C compiler available, so he rewrote the runtime system in assember, which makes it difficult to modify his port. An alternative is to wait for Windows NT (Win32) or OS/2 ports, which may be done in the coming months (a couple of people have independently been working on OS/2 ports recently). Another alternative is to look in directory pub/ml of ftp.dcs.ed.ac.uk, where there are a couple of (partial) implementations of SML that run on PCs. A third alternative is to look into Xavier Leroy's CAML Light. (Details of these are in the comp.lang.ml FAQ message.) However, Guttesen's 386 code generator was used by Mark Leone of CMU as the basis for a port to Unix on Ix86 machines. The current release of SML of New Jersey (0.93) incorporates Intel/Unix support for Mach (used at Carnegie-Mellon University), BSD386 (a product of BSDI?), and 386bsd (a free version of Unix for the PC). There are also versions that run under Linux (available as part of the free Linux distribution) and SVR4, although we have not yet integrated the code supporting Linux and SVR4 into the distributed 0.93 runtime system. Interest has been expressed in a port for SCO Unix, but, as far as we know, no one has done such a port. Very recently Peter Bertelsen of the Technical University of Denmark has done a port to OS2, which is now available on research.att.com, directory dist/ml. Linux? ------ (Thanks to Ralf Reetz, Peter Su, and Mark Leone) Various ftp sites that seem to carry SML/NJ version 0.93 for Linux: ftp.rz.uni-karlsruhe.de:/linux/mirror.tsx/ binaries/usr.bin/njsml.93.bin.z sources/usr.bin/njsml.93.linux.README sources/usr.bin/njsml.93.linux.README.NEW sources/usr.bin/njsml.93.linux.diffs.z sources/usr.bin/njsml.93.src.tar.z ftp@tsx-11.mit.edu:/pub/linux/ sources/usr.bin/njsml.93.src.tar.z ftp.dcs.glasgow.ac.uk? From the README file: Standard ML of New Jersey Version 0.93 for the i386/i486 running Linux, April 23, 1993 __ WHAT SML/NJ is a compiler for the functional programming language Standard ML (SML). It is a fairly complete and robust implementation of ML. __ FILES njsml.93.bin.z - gzip'd binary of njsml (no SourceGroup) njsml-sg.93.bin.z - gzip'd binary of njsml with SourceGroup njsml.93.src.tar.z - minimal sources for NJSML on Linux njsml.93.mo.i386.z - you'll need these also to compile on Linux You can pick up additional tools and goodies from: research.att.com under the "ml" directory. __ HISTORY This is a port of Standard ML of New Jersey (SML/NJ) to Linux. It is based on the work of Mark Leone (mleone@cs.cmu.edu) who did the port for i386/i486 machines. The current binary was compiled using Linux 0.99.7a. Shared lib 4.3.3. This port was done by Sanford Barr (sbarr@cs.sunysb.edu) based on the original port of 0.91 by Hermano Moura (moura@dcs.glasgow.ac.uk) and Andre Santos (andre@dcs.glasgow.ac.uk). __ RECOMMENDED ENV 16M of ram is suggested if you wish to do anything serious with the system. Also, a 386-40 or better would be helpful. __ KNOWN BUGS AND DEFICIENCIES 1 Some minimal precision problems exist when a 387 emulator is used. 2 ML functions System.Directory.listDir and System.Directory.getWD not working at the moment. __ WHERE NJ-SML 0.93 should be available at most major Linux sites. It should also be available in: sbcs.sunysb.edu:/pub/linux by the time you are reading this. OS/2: ----- Standard ML of New Jersey (version 0.93) has been ported to PC's running OS/2. Signal handling is not implemented. This port has been implemented using Mark Leone's code generator for Intel 80386 and the Unix emulator emx, copyright of Eberhard Mattes. SML/NJ is copyright of AT&T Bell Laboratories. There is no warranty of any kind! Requirements: - IBM OS/2 version 2.x - HPFS file system (long file names required) - emx version 0.8g or later - '.mo' files for i386 The port is available for anonymous ftp from research.att.com (in /dist/ml) and, in Europe, from ftp.id.dth.dk (in /pub/bertelsen): 93.os2port.zip Archived with Info-ZIP's Zip utility 93.os2port.tar.Z Archived with GNU's tape archive utility 93.os2port.txt Port announcement & installation guide Please note that the .tar.Z and .zip version of the SML/NJ port are exactly alike and both contain a full source set (but no '.mo' files) for compiling to OS/2 with emx/gcc (not included). The i386 '.mo' archive (93.mo.i386.tar.Z) is available from research.att.com (in /dist/ml) and princeton.edu (in /pub/ml). The emx environment is available from various OS/2 related ftp sites, e.g. ftp-os2.cdrom.com. A binary-only release of this SML/NJ port (no source, interactive system executable only) is also available for anonymous ftp from ftp-os2.cdrom.com. If you have questions concerning this port, please send email to: Peter Bertelsen (c917023@id.dth.dk) Department of Computer Science, Technical University of Denmark FreeBSD: -------- SML/NJ is also available in source and binary format for FreeBSD from freebsd.cdrom.com:/pub/FreeBSD/packages/sml_src.tgz and sml_bin.tgz. The binary package includes EXene and CML as well. -------------------------------------------------------------------------- 5. Where can I find documentation on SML? THE DEFINITION. Robin Milner, Mads Tofte and Robert Harper The Definition of Standard ML MIT, 1990. ISBN: 0-262-63132-6 Robin Milner and Mads Tofte Commentary on Standard ML MIT, 1991 ISBN: 0-262-63137-7 TEXTS. Jeffrey D. Ullman Elements of ML Programming Prentice-Hall, 1993 (Oct. 15) ISBN: 0-13-184854-2 (See Comp.Lang.ML archives, message from Ullman dated 22 Sep 1993 for chapter headings.) Rachel Harrison Abstract Data Types in Standard ML John Wiley & Sons, April 1993 ISBN: 0-471-938440 Ake Wikstrom Functional Programming Using Standard ML Prentice Hall 1987 ISBN: 0-13-331661-0 Chris Reade Elements of Functional Programming Addison-Wesley 1989 ISBN: 0-201-12915-9 Lawrence C Paulson ML for the Working Programmer Cambridge University Press 1991 ISBN: 0-521-39022-2 Stefan Sokolowski Applicative High Order Programming: The Standard ML perspective Chapman & Hall 1991 ISBN: 0-412-39240-2 0-442-30838-8 (USA) Ryan Stansifer ML Primer Prentice Hall, 1992 ISBN 0-13-561721-9 Colin Myers, Chris Clack, and Ellen Poon Programming with Standard ML Prentice Hall, 1993 ISBN 0-13-722075-8 (301pp) The following report is available from the LFCS (Lorraine Edgar, lme@dcs.ed.ac.uk) and costs 5 pounds or 10 US dollars. It covers all of Standard ML. The report is also available via the World Wide Web off of http://www.cs.cmu.edu:8001/afs/cs.cmu.edu/project/fox/mosaic/HomePage.html. Alternatively, the report can be ftp'd from ftp.cs.cmu.edu as the file /afs/cs/project/fox/mosaic/intro-notes.ps. Robert Harper Introduction to Standard ML LFCS Report Series ECS-LFCS-86-14 Laboratory for Foundations of Computer Science Department of Computer Science University of Edinburgh Nov. 1986 (revised Jan. 1989 by Nick Rothwell and Kevin Mitchell) The following report is available from the LFCS (Lorraine Edgar, lme@dcs.ed.ac.uk) and costs 2.50 pounds or 5 US dollars for single copies and 1.50 pounds or 3 dollars when bought in bulk. It includes an introduction to Standard ML and 3 lectures on the modules system. Mads Tofte Four Lectures on Standard ML LFCS Report Series ECS-LFCS-89-73 Laboratory for Foundations of Computer Science Department of Computer Science University of Edinburgh March 1989 The following report is available from the LFCS (Lorraine Edgar, lme@dcs.ed.ac.uk) and is free. It introduces Extended ML, a language for writing (non-executable) specifications of Standard ML programs and for formally developing Standard ML programs from such specifications. Don Sannella Formal program development in Extended ML for the working programmer. LFCS Report Series ECS-LFCS-89-102 Laboratory for Foundations of Computer Science Department of Computer Science University of Edinburgh December 1989 -------------------------------------------------------------------------- 6. Where can I find library code? The Edinburgh SML Library provides a consistent set of functions on the built-in types of the language and on vectors and arrays, and a few extras. It includes a "make" system and a consistent set of parsing and unparsing functions. The library consists of a set of signatures with sample portable implementations, full documentation, and implementations for Poly/ML, Poplog ML and SML/NJ that use some of the non-standard primitives available in those systems. It is distributed with Poly/ML, Poplog ML and Standard ML of New Jersey. It is also available from the LFCS. The library documentation is available as a technical report from the LFCS (Lorraine Edgar, lme@dcs.ed.ac.uk) and costs 5 pounds or 10 US dollars. The LaTeX source of the report is included with the library. Dave Berry The Edinburgh SML Library LFCS Report Series ECS-LFCS-91-148 Laboratory for Foundations of Computer Science Department of Computer Science University of Edinburgh April 1991 The SML/NJ Library is distributed with the SML of New Jersey compiler. It provides a variety of utilities such as 2-dimensional arrays, sorting, sets, dictionaries, hash tables, formatted output, Unix path name manipulation, etc. The library compiles under SML/NJ but should be mostly portable to other implementations. -------------------------------------------------------------------------- 7. Theorem Provers and ML (Collected by Paul Black, pblack@cs.berekeley.edu. Thanks Paul!) - LCF (Edinburgh LCF and Cambridge LCF) * written in the original Edinburgh dialect of ML from which SML developed. "Logic and Computation: Interactive Proof with Cambridge LCF" also by Lawrence C. Paulson. - Lego (LFCS, Edinburgh Univ., SML) * originally developed in CAML * latest version (5) now runs under SML/NJ * only higher-order resolution * available via anon. ftp from ftp.dcs.ed.ac.uk:/pub/lego - HOL90 Authors = Konrad Slind, Elsa Gunter elsa@research.att.com, slind@informatik.tu-muenchen.de http://lal.cs.byu.edu/lal/hol-documentation.html hol90 is a free implementation in SML/NJ of Mike Gordon's HOL logic (a polymorphic version of Church's Simple Type Theory). The system provides a lot of automated support including: - a powerful rewriting package; - pre-installed theories for booleans, products, sums, natural numbers, lists, and trees; - definition facilities for recursive types and recursive functions over those types (mutual recursion is also handled); - extensive libraries for strings, sets, group theory, integers, the real numbers, wellordered sets, automatic solution of goals involving linear arithmetic, tautology checking, inductively defined predicates, Hoare logic, Chandy and Misra's UNITY theory, infinite state automata, and many others. The HOL community has a lively mailing list accessible at info-hol-request@leopard.cs.byu.edu and a yearly user's meeting that alternates between Europe and North America. hol90 is available by anonymous ftp from machine = ftp.informatik.tu-muenchen.de directory = local/lehrstuhl/nipkow/hol90/hol90.6.tar.Z or machine = research.att.com directory = dist/ml/hol90/hol90.6.tar.Z - NuPrl (from Bob Constable`s group at Cornell) - Isabelle (Lawrence C. Paulson, Cambridge Univ. ) * has rewriting, but not many decision procedures. It does has things like model elimination-based decision procedures. * a generic automatic theorem prover i.e. you can program it to the logic system/proof system you want. Already has the following subsystems already implemented: i) FOL - first order logic ii) HOL - higher order logic iii) LCF - Logic of computable functions iv) LK - Gentzen system LK v) Modal - Modal logic systems T, S4, S43 vi) ZF - Zermelo-Fraenkel set theory * ftp from - MERILL (Brian Matthews, U. of Glasgow & Rutherford Appleton Laboratory) * written in standard ML * a general purpose order-sorted equational reasoning system * Allows the user to declare their own object language, allows AC-rewriting and AC-unification of terms and equations, has several completion algorithms, is built on a hierarchy of types known as Order-Sorting, and allows the user to try different termination methods. * available via anonymous ftp from the University of Glasgow, ftp address: ftp.dcs.glasgow.ac.uk (130.209.240.50) * Brian Matthews, brian@dcs.glasgow.ac.uk or bmm@inf.rl.ac.uk - FAUST (Karlsruhe) * a HOL add-on written in ML. * ftp from goethe.ira.uka.de (129.13.18.22) - Alf * written in SML * An implementation of Martin-Lofs type theory with dependent types * Proof editor * available by anonymous ftp from cs.chalmers.se * only higher-order resolution - Coq * written in Caml-Light (but Caml-Light and SML are VERY similar) * no serious automated reasoning subsystems (other than higher-order resolution), but has a VERY nice package for program verification. * available via anon. ftp from ftp.inria.fr:/INRIA/coq/V5.8 * possible contact: Chet Murthy - ICLHOL/ProofPower (ICL Secure Systems) * a commercial system using a reimplementation of HOL in SML * contact ProofPower-server@win.icl.co.uk - Lamdba/DIALOG (Abstract Hardware Ltd) * a commercial tool written in Poly/ML, neither of which is free. - Elf (Frank Pfenning, Carnegie Mellon Univ.) * Elf is a higher-order logic programming language based on the LF Logical Framework. * Elf is not a theorem prover per-se, but is useful for specifying and proving properties of programming languages, logics, and their implementations. A number of examples are provided with the distribution. * The Elf implementation is written in SML/NJ and should be easily portable to other SML implementations. * Elf can be ftp'd from alonzo.tip.cs.cmu.edu (128.2.209.194) in the directory /afs/cs/user/fp/public. * A bibliography and a collection of papers regarding LF and Elf can be found in the directory /afs/cs/user/fp/public/elf-papers. * There is an Elf mailing list. Contact elf-request@cs.cmu.edu to join. * For further information, contact Frank Pfenning (fp@cs.cmu.edu). References "ML for the Working Programmer" by Lawrence C. Paulson contains a small first-order theorem prover. Paulson also has a good chapter on writing theorem provers in ML in "Handbook of logic in computer science", Edited by: S. Abramsky, Dov M. Gabbay, and T.S.E. Maibaum. Oxford : Clarendon Press, 1992-. CALL#: QA76 .H2785 1992 Others We have an automated theorm proving system here at the University of Tasmania, but it is still under development, currently riddled with bugs and has an obscure "input language"; aside from those minor problems, it'd be perfect... La Monte H. Yarroll Edinburgh's Concurrency Workbench and Sussex's Process Algebra Mauipulator are also ML systems of note, though neither are interactive theorem provers. -------------------------------------------------------------------------- 8. Miscellaneous How do I write the Y combinator in SML without using a recursive definition (i.e. "fun" or "let rec")? datatype 'a t = T of 'a t -> 'a val y = fn f => (fn (T x) => (f (fn a => x (T x) a))) (T (fn (T x) => (f (fn a => x (T x) a)))) Where can I find an X-Windows interface to SML? Poly/ML, Poplog/ML, and SML/NJ all come with X-Windows interfaces. See the appropriate entries under section 3. In addition, Poly/ML interfaces to the industry standard OSF/Motif toolkit. How do I call a C function from SML/NJ? See the file runtime/cfuns.c for example C functions that are in the runtime and callable from ML. You have to enter the function into a table at the end of the file along with a string. You use the function System.Unsafe.CInterace to look up the function, using the string as the key. Note that you'll need to convert ML values to C representations and back. You'll have to rebuild the compiler using makeml. How do I get the emacs mode to work with Emacs version 19? Add these three lines at the top of your `sml-init.el' file: - ----- BEGIN addition ; emacs 19 doesn't have `make-shell', which sml-shell needs, so get it ; when necessary. 12 Oct 1993 M-J. Dominus (mjd@saul.cis.upenn.edu) (autoload 'make-shell "make-shell" "Make and initialize shell buffer for SML." nil) - ----- END addition They tell emacs to load the file `make-shell.el' when it needs to use the `make-shell' function. Then install this file as `make-shell.el' somewhere on your load path, probably in your emacs `site-lisp' directory: