Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] View of /archive/0.93/doc/manual/GUIDE.dvi
ViewVC logotype

View of /archive/0.93/doc/manual/GUIDE.dvi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4958 - (download) (as text) (annotate)
Wed Apr 10 01:33:29 2019 UTC (3 months, 1 week ago) by dbm
File size: 41492 byte(s)
adding 0.93 src and doc to archive
÷ƒ’À;è TeX output 1993.02.17:1407‹ÿÿÿÿ ¡3ڍ ýEÌ& œ3ڍ ý†Ì& ©Š=‘VÐþóHò"V½p
cmbx10ëHStandard–óFML“of“New“JerseyŽ¤’àêó>Kñ`y½p
cmr10é|Ž¡’²‚ìó<ò"VG®
cmbx10çUser's‘Ÿ¼GuideŽ¡Ÿ’ÆñÍó+X«Qcmr12Ö(V‘ÿVersion‘ê¨0.93)Ž¤¡’²#-ó4Kñ`yff
cmr10ßF‘þÌÌebruary–ÌÍ15,“1993Ž¡ êÏ\’„NÐóKñ`y

cmr10ÄCop•¸ãyrigh“t‘rž²×cŽŽŽ‘UUó!",š

cmsy10Æ
ŽŽŽŽ‘ª«Ä1993›UUb“y˜A‘ÿ*ªT&T˜Bell˜LabGoratoriesŽŽŽŒ‹* ¡3ڍ ýEÌ& œ3ڍ ý†Ì&ó7ò"Vff
cmbx10âCon•Š=ten“tsŽ©óò"V

cmbx10É1Ž‘In®9troQÇduction’W$üGUIDE-1ŽŽ¤‘Ä1.1Ž‘&RepGorting–UUBugs“and“Errors‘[Á‘üó b>

cmmi10Å:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄGUIDE-1ŽŽ¡‘1.2Ž‘&Keeping–UUin“T‘ÿ*ªouc¸ãh‘qJ‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄGUIDE-1ŽŽ¡‘1.3Ž‘&DoGcumen¸ãtation‘ÍÁ‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄGUIDE-1ŽŽ¦É2Ž‘Ho®9w–ÕTto“Use“the“System’&"GUIDE-2ŽŽ¦3Ž‘SML/NJ–ÕTLanguage“Notes’JGUIDE-4ŽŽ¡‘Ä3.1Ž‘&Hexadecimal–UUin¸ãteger“literals‘Ô¦‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄGUIDE-4ŽŽ¡‘3.2Ž‘&V‘ÿ*ªector–UUexpressions“and“patterns‘i썑üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄGUIDE-4ŽŽ¡‘3.3Ž‘&First-class‘UUcon•¸ãtin“uations‘š‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄGUIDE-4ŽŽ¡‘3.4Ž‘&References–UUand“w¸ãeak“pGolymorphismMg‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄGUIDE-4ŽŽ¡‘3.5Ž‘&Higher-order‘UUMoGdules‘”¿‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄGUIDE-6ŽŽ¡‘3.6Ž‘&Discrepancies›UUbGet•¸ãw“een˜SML/NJ˜and˜the˜Denition‘͍‘üÅ:Ž–Ǎ‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž“‘ü:Ž‘
í—ÄGUIDE-9ŽŽ¦É4Ž‘SML/NJ–ÕTCompiler“Notes’ÂòGUIDE-10ŽŽ¡¤Ÿ!’„ÀâStandard–…ML“of“New“JerseyŽŸ’—dLicense–…and“DisclaimerŽ¡¡©‘b$ÄCop•¸ãyrigh“t‘rž²×cŽŽŽ‘UUÆ
ŽŽŽŽ‘ª«Ä1989,1990,1991,1993›UUb“y˜A‘ÿ*ªT&T˜Bell˜LabGoratoriesŽ¡’¿UöAll–UURighš¸ãts“Reserv˜edŽ¦¡‘Pš¸ãermission–Òto“use,– cop˜y›ÿ*ª,“moGdify˜,“and–Òdistribute“this“soft•¸ãw“are–Òand“its“doGcumenš¸ãtation“for“an˜yŽ¡‘purpGose–´¹and“without“fee“is“herebš¸ãy“gran˜ted,‘̒pro˜vided“that“the“abGo˜v˜e“cop˜yrigh˜t“notice“appGear“inŽ¡‘all–copies“and“that“bšGoth“the“cop•¸ãyrigh“t–notice“and“this“p˜ermission“notice“and“w•¸ãarran“t“y‘disclaimerŽ¡‘appšGear–¸ºin“supp˜orting“do˜cumen¸ãtation,‘“and“that“the“name“of“A‘ÿ*ªT&T‘¸^Bell“Lab˜oratories“or“an¸ãyŽ¡‘A‘ÿ*ªT&T‘ñµen•¸ãtit“y–ñÝnot“bGe“used“in“advš¸ãertising“or“publicit˜y“pGertaining“to“distribution“of“the“soft˜w˜areŽ¡‘without–UUspšGecic,“written“prior“p˜ermission.ŽŸ‘ÉA‘ÿ
«T&T‘â®disclaims–âóall“w•®9arran“ties–âówith“regard“to“this“soft•®9w“are,‘&[including–âóall“impliedŽ¡‘w•®9arran“ties–V¨of“merc•®9han“tabilit“y–V¨and“tness.‘	 lIn“no“ev•®9en“t–V¨shall“A‘ÿ
«T&T‘VEbQÇe“liable“forŽ¡‘anš®9y–vùspQÇecial,‘‰Øindirect“or“consequen˜tial“damages“or“an˜y“damages“whatsoQÇev˜er“resultingŽ¡‘from–bloss“of“use,›3Ædata“or“prots,˜whether“in“an“action“of“con®9tract,˜negligence“or“otherŽ¡‘tortious–!vaction,‘4~arising“out“of“or“in“connection“with“the“use“or“pQÇerformance“of“thisŽ¡‘soft•®9w“are.ŽŽŸ’Õ»LÄGUIDE-iiŽŽŒ‹ ¡3ڍ ýEÌ& œ3ڍ ý†Ì&â1Ž‘ÖÿInŠ=trouÂductionŽŸçÄThis–>doGcumenš¸ãt“pro˜vides“some“general“information“abGout“the“Standard“ML›>of“Jersey“(SML/NJ)˜system“andŽ¤hoš¸ãw–·Sto“use“it.‘—ÀThis“is“not“a“tutorial“on“the“Standard“ML‘·9language,‘ÏÒho˜w˜ev˜er.‘—ÀT‘ÿ*ªo“learn“ho˜w“to“program“inŽ¡Standard–yfML‘y\yš¸ãou“should“read“one“of“the“a˜v‘ÿqÇailable“b•Go“oks–yfor“tutorials“on“the“sub‘Ž8ject,‘‚jsuc˜h“as“P˜aulson's“óý':

cmti10ÇMLŽ¡for–“çthe“Working“Pr–ÿ}'o“gr“ammer–UUÄ(Cam¸ãbridge,“1991).Ž© þ6ó0ÂÖN cmbx12Û1.1Ž‘ÀRep`orting–€Bugs“and“ErrorsŽŸuTÄW‘ÿ*ªe–¥|are“eager“to“receiv¸ãe“repšGorts“of“bugs“in“the“compiler“and“related“to˜ols“and“libraries“or“errors“in“theŽ¡došGcumen•¸ãtation.‘%ƒAn“y–p‡error“message“b˜eginning“with“\óßê<x

cmtt10ÊCompiler‘?ýbugÄ"“denitely“indicates“a“bug“in“the“compilerŽ¡and–;¶should“bšGe“rep˜orted.‘$êBut“don't“b˜e“sh¸ãy“ab˜out“rep˜orting“anš¸ãy“problems“that“ma˜y“conceiv‘ÿqÇably“bGe“bugs.Ž¡Please–¸use“the“bug“repšGort“form“in“the“le“Êdoc/bugs/bug.form“Äand“send“commen¸ãts“and“bug“rep˜orts“toŽ¡Êsml-bugs@research.att.comŽ’ƒ?µÄ.ŽŸ‘Commenš¸ãts–u+and“suggestions“regarding“the“new“SML/NJ‘u#Library“are“also“w˜elcome“and“should“bGe“sen˜t“toŽ¡John–UURepp¸ãy“at“Êjhr@research.att.comŽ‘lUÄ.Ž¦Û1.2Ž‘ÀKeeping–€in“T‘þàouc hŽŸuTÄThere–-æis“a“mailing“list“for“news“and“discussion“of“Standard“ML‘-®(and“other“dialects“of“ML).“The“addressŽ¡of–Ùthe“mailing“list“is“Êsml-list@cs.cmu.eduŽ‘g˜ÞÄ,›úbut“administrativ¸ãe“requests,˜suc¸ãh“as“requests“to“join“the“list,Ž¡should–UUbGe“senš¸ãt“to“Êsml-request@cs.cmu.eduŽ‘vÕÄ.‘qÇThe“mailing“list“is“curren˜tly“moGderated“b˜y“Greg“Morrisett.Ž©‘If–>Othings“go“as“planned,‘¸the“sml“mailing“list“will“sošGon“b˜e“supplemenš¸ãted“b˜y“a“new“netnews“group,Ž¡Êcomp.lang.smlÄ.Ž¦‘Announcemenš¸ãts–ª½of“new“v˜ersions“of“Standard“ML‘ª§of“New“Jersey“are“distributed“via“the“sml“mailing“listŽ¡and–UUsevš¸ãeral“existing“netnews“groups,“suc˜h“as“Êcomp.lang.misc“Äand“Êcomp.lang.functionalÄ.ŽŸ þ6Û1.3Ž‘ÀDo`cumen tationŽŸuTÄThe–ëßStandard“ML‘ë¸of“New“Jersey“system“is“describGed“bš¸ãy“the“follo˜wing“doGcumen˜ts,‘whic˜h“are“found“in“theŽ¡Êdoc–UUÄdirectory“of“the“distribution.ŽŸ‘ÿÿÆŽŽŽ‘ÉRelease‘åZNotesÄ.‘,8This–„§describGes“what“is“in“the“Standard“ML‘„rof“New“Jersey“distribution,‘®dwhat“hardw¸ãareŽ¡‘and›UUsoft•¸ãw“are˜is˜required˜to˜use˜the˜compiler,˜and˜ho“w˜to˜install˜the˜soft“w“are.Ž©‘ÿÿÆŽŽŽ‘ÉStandard–aML‘`øof“New“Jersey“Reference“Man®9ualÄ.‘ÞmThis–Îâmanš¸ãual“con˜tains“sev˜eral“sections“whic˜hŽ¡‘are–UUfound“in“separate“les.Ž¦‘ÉGUIDEŽŽ‘DŸñÄis–Ùthe“doGcumenš¸ãt“y˜ou“are“no˜w“reading.‘ÑTIt“con˜tains“basic“information“on“using“the“system,Ž¡‘/discusses–'Glanguage“issues“pšGertinen¸ãt“to“Standard“ML‘'of“New“Jersey‘ÿ*ª,‘[Ãand“describ˜es“some“sp˜ecialŽ¡‘/features–UUof“the“compiler.‘qÇ(Êdoc/manual/GUIDE.psÄ)Ž©‘ÉBASEŽŽ‘<ѼÄdescribšGes–€ãthe“con•¸ãten“ts–€ãof“the“basic“en•¸ãvironmen“t–€ã(the“mo˜dules,–ËÆt¸ãyp˜es,“v‘ÿqÇalues,“Çetc.‘ôrÄthat‘€ãareŽ¡‘/bGound–UUin“the“default“en•¸ãvironmen“t).‘qÇ(Êdoc/manual/BASE.psÄ)Ž¦‘ÉSYSŽŽ‘3xÜÄdošGcumen¸ãts–݀the“comp˜onenš¸ãts“of“the“System“structure,‘õxwhic˜h“pro˜vides“facilities“for“in˜teracting“withŽ¡‘/the–UUcompiler“in¸ãternals“and“with“the“host“opGerating“system.‘qÇ(Êdoc/manual/SYS.psÄ)Ž¦‘ÉLIBŽŽ‘1uNÄis–á¿the“Standard“ML‘á›of“New“Jersey“Library“Man¸ãual.‘This“describšGes“a“set“of“mo˜dules“pro¸ãvidingŽ¡‘/commonly–©Œuseful“abstractions“and“facilities“suc¸ãh“as“sorting,–þ™hashing,“regular‘©Œexpressions,“andŽ¡‘/formatted–3ªI/O.“With“anš¸ãy“public“release“of“SML,“Êdoc/manual/LIB.ps“Äwill“bGe“essen˜tially“iden˜ticalŽ¡‘/to›@CÊsmlnj-lib-0.1/lib-manual.psÄ.‘lHo•¸ãw“ev“er,‘w­w“e˜exp•Gect˜releases˜of˜the˜library˜to˜b“e˜more˜frequen¸ãtŽŽŸ’ÖiGUIDE-1ŽŽŒ‹ ¡3ڍ ýEÌ& œ3ڍ ý†Ì&‘/Äthan–	Ýthe“compiler,‘6þand“the“most“recenš¸ãt“v˜ersion“of“the“library“man˜ual“should“bGe“obtained“fromŽ¤‘/Êlib-manual.psÄ,–UUwhic¸ãh“is“also“stand-alone.ŽŸ‘ÉTOOLŽŽ‘>1»ÄML›UUsoft•¸ãw“are˜toGols,˜suc“h˜as˜SourceGroup,˜mly“acc,˜etc.‘qÇ(Êdoc/manual/TOOL.psÄ)ŽŸIn–caddition,›P§eac¸ãh“of“the“toGols“SourceGroup,˜mly¸ãacc,˜lexgen,˜and“mltš¸ãwig“come“with“their“o˜wn“man˜uals“orŽ¡došGcumen¸ãtation–,¢les.‘÷®These“do˜cumen¸ãtation“les“are“lo˜cated“in“the“appropriate“sub˜directories“of“the“to˜olsŽ¡directory‘ÿ*ª.‘OÔIf–ô¯yš¸ãou“are“installing“SML/NJ‘ô…on“y˜our“system“y˜ou“ma˜y“w˜an˜t“to“pro˜vide“a“loGcal“guide“that“tellsŽ¡where–UUto“nd“the“commands,“došGcumen¸ãtation,“to˜ols,“and“libraries“on“y¸ãour“system.ŽŸ&čâ2Ž‘ÖÿHoŠ=w–…to“Use“the“SystemŽŸçÄThis–ë†section“explains“some“of“the“basic“elemen¸ãts“of“using“the“Standard“ML‘ë`of“New“Jersey“compiler“as“anŽ¡in•¸ãteractiv“e–v”system“inš¸ãto“whic˜h“y˜ou“en˜ter“declarations“and“expressions“or“load“coGde“from“source“les.‘ՄThis“isŽ¡the–|Fmost“accessible“mošGde“of“using“the“compiler,‘§°but“in“the“near“future“there“will“b˜e“other“mo˜des“a¸ãv‘ÿqÇailable“thatŽ¡are–Úämore“appropriate“for“building“\stand-alone"“ML‘ÚÂapplications“with“a“minim¸ãum“of“extraneous“baggage.Ž¡W‘ÿ*ªe–)ïassume“bGeloš¸ãw“that“y˜ou“are“using“the“compiler“under“Unix.‘ï–The“bGeha˜vior“will“bGe“somewhat“dieren˜tŽ¡under–UUother“opGerating“systems“sucš¸ãh“as“the“Macin˜tosh“OS.Ž©þ6ÉRunning–©eStandard“ML.‘
ÄTš¸ãypGe–
¼\ÊsmlÄ"“from“the“Unix“shell.‘šýThis“puts“y˜ou“in˜to“the“in˜teractiv˜e“system.Ž¡The–çûtop“levš¸ãel“prompt“is“\Ê-Ä",‘ýÚand“the“secondary“prompt“(prin˜ted“when“input“is“incomplete)“is“\Ê=Ä".‘MTIf“y˜ou“getŽ¡the–PØsecondary“prompt“when“yš¸ãou“don't“expGect“it,‘Q¾t˜yping“\Ê;Çr‘ÿ}'eturnÄ"“will“often“complete“y˜our“input,‘Q¾or“t˜ypingŽ¡y•¸ãour›UUin“terrupt˜c“haracter˜(Çe.g.‘qÇÄcon“trol-C)˜will˜cancel˜y“our˜input˜and˜return˜to˜the˜ML˜top˜lev“el.ŽŸ‘If–h=\ÊsmlÄ"“došGesn't“w¸ãork,‘l÷ask“where“Ésml“Ähas“b˜een“installed“on“yš¸ãour“mac˜hine“and“use“the“appropriate“pathŽ¡name–UUor“redene“yš¸ãour“P–ÿ*ªA“TH–UUen˜vironmen˜t“v‘ÿqÇariable.Ž¦ÉIn•®9teractiv“e‘I/input.‘
ÄInput–ºto“the“top“levš¸ãel“in˜terpreter“(Çi.e.‘ Ädeclarations“and“expressions)“m˜ust“bGe“termi-Ž¡nated–9èbš¸ãy“a“semicolon“(and“carriage“return)“bGefore“the“system“will“ev‘ÿqÇaluate“it.‘h£The“system“then“prin˜ts“out“aŽ¡respGonse–¤Éindicating“the“eect“of“the“ev‘ÿqÇaluation.‘6îExpressions“are“treated“as“implicit“declarations“of“a“standardŽ¡v‘ÿqÇariable–UUÊitÄ.‘qÇF‘ÿ*ªor“example,ŽŸóߤN		cmtt9Â-‘¹–3;‘UŒó¼j‘¹		cmti9Àuser–N<input“after“pr‡omptŽŸÂval–¹–it‘	s,=“3“:“int‘ŸîÀsystem‘N<r•‡esp“onseŽŸÄThis–üæmeans“that“the“v›ÿqÇalue“of“the“last“top“lev¸ãel“expression“ev˜aluated“can“bGe“referred“to“using“the“v˜ariableŽ¡\ÊitÄ."Ž¦ÉIn®9terrupting–Ùcompilation“or“execution.‘
ÄTš¸ãyping–X‹the“in˜terrupt“c˜haracter“(con˜trol-C,“or“óIŒ-ø

cmcsc10ëIDELETEÄ,“de-Ž¡pGending–Ãon“yš¸ãour“\stt˜y"“parameters)“should“in˜terrupt“the“compiler“and“return“y˜ou“to“top“lev˜el.‘ºíThis“is“noŽ¡longer–bdaccomplished“bš¸ãy“raising“the“ÊInterrupt“Äexception,‘¥§and“hence“in˜terrupts“cannot“bšGe“trapp˜ed“b¸ãy“anŽ¡exception‘UUhandler.ŽŸÇOn–“çthe“MIPS“R¾“isc/OS“op–ÿ}'er“ating–“çsystem,“you“may“ne–ÿ}'e“d–“çto“typ›ÿ}'e“a“c˜arriage“r˜eturn“after“the“c˜ontr˜ol-C.Ž¦ÉExiting–Svthe“in•®9teractiv“e‘Svsystem.‘
ÄT•¸ãyping›=scon“trol-D–<q(EOF)“at˜top˜lev¸ãel˜will˜cause˜an˜exit˜toŽ¡the–êœshell“(or“the“parenš¸ãt“proGcess“from“whic˜h“Ésml“Äw˜as“run).‘1One“can“also“terminate“b˜y“callingŽ¡ÊSystem.Unsafe.CInterface.exit()Ä.Ž¦ÉLoading–,MML‘,7source“text“from“a“le.‘
ÄThe– öfunction“Êuse:–?ýstring“->“unit– öÄinš¸ãterprets“its“argumen˜t“asŽ¡a–e£Unix“le“name“relativš¸ãe“to“ÉsmlÄ's“curren˜t“directory“and“loads“the“text“from“that“le“as“though“it“had“bGeenŽŽŸ’ÖiGUIDE-2ŽŽŒ‹%Ë ¡3ڍ ýEÌ& œ3ڍ ý†Ì&Ät¸ãypšGed–¾ in.‘¬)This“should“normally“b˜e“executed“at“top“levš¸ãel,‘ØSbut“the“loaded“les“can“also“con˜tain“calls“of“ÊuseŽ¤Äto–šRrecursiv¸ãely“load“other“les.‘@¿It“is“a“bad“idea“to“call“Êuse“Äwithin“an“expression“or“declaration,‘«‘bGecause“theŽ¡eects–UUare“not“w¸ãell-dened.ŽŸ‘F‘ÿ*ªor–ghindustrial-strength“mš¸ãulti-moGdule“soft˜w˜are“systems,‘–þthe“SourceGroup“system“ma˜y“bGe“more“appropriateŽ¡than–UUÊuse“Ä(see“Êtools/sourcegroupÄ).Ž©þ6ÉSa®9ving–£an“image“of“the“system.‘
ÄUse–L5the“function“ÊexportML:–?ýstring“->“bool–L5Äto“sa•¸ãv“e–L5an“imageŽ¡of–Ùthe“currenš¸ãt“Ésml“Äsystem“(including“the“en˜vironmen˜t“that“y˜ou“ha˜v˜e“built)“in“a“le.‘üØSee“Section“EX-Ž¡POR–ÿ*ªTML(BASE)›\$[Section‘¸ÆEXPOR“TML˜of–\cChapter“BASE],“for“details.‘ÌThe“sa•¸ãv“ed–\cimage“le“is“an“executableŽ¡binary‘ÿ*ª,–UUand“can“bGe“run“bš¸ãy“t˜yping“the“le“name“as“a“command“to“the“shell.Ž¦ÉLibrary–œÕfunctions,‘εBase“en•®9vironmen“t.‘
ÄManš¸ãy–Ðfunctions“are“a˜v‘ÿqÇailable“in“the“standard“initial“en˜viron-Ž¡menš¸ãt;‘“±these–~èare“describGed“in“Chapter“BASE.“The“rest“of“the“library“is“pro˜vided“(at“presen˜t)“as“source“thatŽ¡can–UUbGe“loaded;“see“Chapter“LIB.ŽŸ‘The–P~built-in“library“functions,›„ªthe“set“of“separately“loadable“structures“and“functors,˜and“the“programmingŽ¡in¸ãterface–UUto“the“Unix“opšGerating“system“are“describ˜ed“in“Chapter“LIB.Ž¦ÉError‘\›messages.‘
ÄThe–©’compiler“attempts“to“reco•¸ãv“er–©’from“syn¸ãtactic“errors“so“that“it“can“also“proGduceŽ¡seman•¸ãtic›w(t“ypGe-c“hec“king)˜errors˜during˜the˜same˜compilation.‘ÖùSyn“tactic˜error˜reco“v“ery˜is˜more˜accurate˜forŽ¡source–aRles“loaded“bš¸ãy“Êuse“Äor“SourceGroup“than“it“is“in“the“in˜teractiv˜e“system|this“is“bšGecause“lo˜ok‘ÿqÇahead“isŽ¡not–UUpGossible“when“text“is“en¸ãtered“one“line“at“a“time.Ž©‘When–Ü¥compiling“les,‘þythe“error“messages“include“line“n•¸ãum“bšGers–Ü¥and“c¸ãharacter“p˜ositions“within“the“line.Ž¡F‘ÿ*ªor‘UUexample:ŽŸÂ-–¹–if“trueŽ¤=–¹–then“5“trueŽ¡=–¹–else“6;Ž¡std_in:7.6-7.11–¹–Error:“operator“is“not“a“functionŽ¡‘	s,operator:‘¹–intŽ¡‘	s,in‘¹–expression:Ž¡‘æX5‘¹–trueŽ¡-ŽŸÄHere–F–the“lošGcation“information“Êstd_in:7.6-7.11“Äindicates“that“the“erroneous“expression“\Ê5‘?ýtrueÄ"“o˜ccupiesŽ¤cš¸ãharacters–‰6“through“11“of“the“7th“line“of“input“from“Êstd_inÄ.‘èF‘ÿ*ªor“simple“syn˜tactic“errors“this“pGositionŽ¡information–Ãis“usually“accurate“or“pGerhaps“o“bš¸ãy“just“one“line.‘$F‘ÿ*ªor“some“classes“of“errors“the“line“n˜um˜bGersŽ¡maš¸ãy–Βnot“bGe“v˜ery“useful,‘ìábšGecause“they“delineate“a“p˜otenš¸ãtially“large“declaration“con˜taining“the“error.‘ÝIf“theŽ¡error–UUošGccurs“in“a“le“b˜eing“loaded“bš¸ãy“ÊuseÄ,“the“line“n˜um˜bšGers“will“refer“to“lines“in“the“le“b˜eing“loaded.Ž¦‘There–ñëare“a“n•¸ãum“bGer–ñëof“dierenš¸ãt“forms“of“t˜ypGe“error“message,‘Íand“it“ma˜y“require“some“practice“bGefore“y˜ouŽ¡bGecome–ðAadept“at“inš¸ãterpreting“them.‘BŒThe“most“common“form“indicates“a“mismatc˜h“bGet˜w˜een“the“t˜ypGe“of“aŽ¡function–Ïv(or“opšGerator)“and“its“argumen¸ãt“(or“op˜erand).‘E(A‘ÏTrepresen¸ãtation“of“the“oending“expression“is“usuallyŽ¡included,‘R¬but–Rthis“is“an“image“of“the“inš¸ãternal“abstract“syn˜tax“for“the“expression“and“ma˜y“dier“signican˜tlyŽ¡from–XFthe“original“source“coGde.‘mF‘ÿ*ªor“instance,‘Šãan“expression“\ÊifŽ‘¿÷ÅeŸÿóٓ Rcmr7³1Ž‘	¼pÊthenŽ–#üaÅeŸÿ³2Ž‘	¼pÊelseŽ“ÅeŸÿ³3Ž‘|sÄ"–XFis“represenš¸ãted“in˜ternallyŽ¡as–UUa“Êcase“Äexpression“o•¸ãv“er–UUa“b•Go“olean‘UUv‘ÿqÇalue:‘qÇ\ÊcaseŽ‘?ñÅeŸÿ³1Ž‘	¼pÊof–?ýtrue“=>Ž–C|OÅeŸÿ³2Ž‘	¼pÊ|–?ýfalse“=>Ž“ÅeŸÿ³3Ž‘|sÄ."ŽŸþ6ÉPrin®9ting.‘
ÄThe–y—structure“ÊSystem.Print“Äconš¸ãtains“sev˜eral“useful“
ags“and“functions“with“whic˜h“y˜ou“canŽ¡conš¸ãtrol–Œþor“redirect“compiler“error,–šédiagnostic,“and–Œþresult“messages.‘ÃSee“PRINT(SYS).“Y‘ÿ*ªou“can“also“con˜trolŽ¡the–UUdepth“of“prin¸ãting“of“large“structured“v‘ÿqÇalues.ŽŽŸ’ÖiGUIDE-3ŽŽŒ‹5¦ ¡3ڍ ýEÌ& œ3ڍ ý†Ì&ÉUseful–ŸÉsystem“
ags.‘
ÄThere–bare“a“n•¸ãum“bGer–bof“useful“system“
ags“and“v‘ÿqÇariables,‘1ewhic¸ãh“are“found“in“theŽ¤structure–€ÊSystem.Control“Äand“its“substructures.‘UÕThese“are“doGcumenš¸ãted“in“Section“CONTR˜OL(SYS).“TheyŽ¡can––KbGe“used,›¦ˆfor“instance,˜to“redene“the“primary“and“secondary“prompt“strings,˜to“conš¸ãtrol“the“prin˜ting“ofŽ¡garbage–UUcollection“messages,“or“to“ne“tune“memory“managemen¸ãt.Ž©¶ŠÉIn®9teracting–fwith“the“opQÇerating“system.‘
ÄThe–ô›structure“ÊSystem“Äand“sevš¸ãeral“of“its“substructures“con˜tainŽ¡functions–îfor“sucš¸ãh“tasks“as“executing“Unix“commands“from“within“Ésml“Äand“c˜hanging“the“curren˜t“directory‘ÿ*ª.Ž¡These–UUare“doGcumen¸ãted“in“Chapter“SYS.Ž¦ÉEmacs‘Ü*suppQÇort.‘
ÄThe–[Gdirectory“conš¸ãtrib/emacs“con˜tains“pac˜k‘ÿqÇages“suppšGorting“editing“ML‘[Esource“co˜de“andŽ¡inš¸ãteracting–UUwith“Ésml“Äunder“gn˜u“emacs.ŽŸ%ʍâ3Ž‘ÖÿSML/NJ–…Language“NotesŽŸçÄThis–2hsection“co•¸ãv“ers–2hsome“(essenš¸ãtially)“up˜w˜ard“compatible“extensions“of“Standard“ML‘2`pro˜vided“b˜y“SML/NJ,Ž¡and–vlists“other“discrepancies“bGet•¸ãw“een–vSML/NJ‘Gand“the“Denition“of“Standard“ML.“Use“of“the“extensionsŽ¡will–UUof“course“cause“problems“when“pšGorting“y¸ãour“ML“co˜de“to“another“implemen¸ãtation“of“Standard“ML.Ž© ¶ŠÛ3.1Ž‘ÀHexadecimal–€in teger“literalsŽŸuTÄIn•¸ãteger›¤Jconstan“ts˜can˜bGe˜expressed˜in˜hexadecimal˜notation.‘6ÄSuc“h˜constan“ts˜start˜with˜the˜digit˜zero˜follo“w“edŽ¡bš¸ãy–UU\ÊxÄ"“follo˜w˜ed“a“sequence“of“digits“and“the“c˜haracters“\Êa-fÄ",“\ÊA-FÄ".“Examples“are“Ê0x0,–?ý0xa3,“~0x2ffÄ.Ž¦Û3.2Ž‘ÀV‘þàector–€expressions“and“patternsŽŸuTÄV‘ÿ*ªectors–³Ëare“homogeneous,‘‹gimmš¸ãutable“arra˜ys“(see“Section“VECTOR(BASE)).“The“v˜ector“expressionŽ¡Ê#[Ž‘
úÇexpŽ‘{&ŸqƳ0Ž‘÷™Å;‘ª¨ÇexpŽ‘¥ÔŸqƳ1Ž‘"GÅ;–ª¨:“:“:Ž‘ÿ÷;‘ª¨ÇexpŽ‘¥ÔŸqÆó	0e—rcmmi7´nó
O!â…cmsy7µ³1Ž‘ SÆÊ]Ž‘)SšÄ(where›¿×Ån–xšÆ“Ä0)˜creates˜a˜v•¸ãector˜of˜length˜Ån˜Äwhose˜elemen“ts˜are˜the˜v‘ÿqÇalues˜of˜theŽ¡corresp•Gonding›Êósub“expressions.‘Ò As˜with˜other˜aggregate˜expressions,‘èZthe˜elemen¸ãt˜expressions˜are˜ev‘ÿqÇaluatedŽ¡from–ãleft“to“righš¸ãt.‘K­V‘ÿ*ªectors“ma˜y“bGe“pattern-matc˜hed“b˜y“v˜ector“patterns“of“the“form“Ê#[Ž‘
bÿÇp‘ÿ}'atŽ‘^YŸqƳ0Ž‘ÚÌÅ;‘ª¨Çp‘ÿ}'atŽ‘¦ŸqƳ1Ž‘"uÅ;–ª¨:“:“:Ž‘ÿ÷;‘ª¨Çp‘ÿ}'atŽ‘¦ŸqÆ´nµ³1Ž‘SôÊ]Ž‘$“ñÄ.Ž¡Sucš¸ãh–UUa“pattern“will“only“matc˜h“a“v˜ector“v‘ÿqÇalue“of“the“same“length.ŽŸ‘V‘ÿ*ªector–Gyexpressions“and“vš¸ãector“patterns“are“more“compact“and“ecien˜t“than“lists,‘J>and“are“comparable“inŽ¡cost–UUto“records.Ž¦Û3.3Ž‘ÀFirst-class‘€con• tin“uationsŽŸuTÄA–UUset“of“primitivš¸ães“has“bGeen“added“to“ML“to“giv˜e“access“to“con˜tin˜uations:ŽŸ³Âtype–¹–'a“contŽ¤val–¹–callcc“:“('1a“cont“->“'1a)“->“'1aŽ¡val–¹–throw“:“'a“cont“->“'a“->“'bŽŸ³ÄThe›Hªcon•¸ãtin“uation˜of˜an˜expression˜is˜an˜abstraction˜of˜what˜the˜system˜will˜do˜with˜the˜v‘ÿqÇalue˜of˜the˜expression.ŽŸ‘The–UUuse“of“Écallcc“Äis“describGed“in“Section“CALLCC(BASE).Ž¦Û3.4Ž‘ÀReferences–€and“w eak“p`olymorphismŽŸuTÄThe–kütš¸ãypGe“c˜hec˜k˜er“uses“w˜eak“t˜ypšGe“v‘ÿqÇariables“to“supp˜ort“secure“use“of“references“and“arra¸ãys“and“other“ob‘Ž8jectsŽŸlikš¸ãe–öhash“tables“implemen˜ted“in“terms“of“references“and“arra˜ys.‘‰©The“follo˜wing“is“a“v˜ery“brief“explanationŽŽŸ’ÖiGUIDE-4ŽŽŒ‹EÆ ¡3ڍ ýEÌ& œ3ڍ ý†Ì&Äof–£Nhoš¸ãw“they“w˜ork,‘öÌbut“y˜ou“should“try“some“expGerimen˜ts“to“bšGecome“familiar“with“the“b˜ehaš¸ãvior“of“w˜eakŽ¤pGolymorphism.ŽŸ‘It–¯is“wš¸ãell“kno˜wn“that“m˜utable“ob‘Ž8jects“lik˜e“references“can“bGe“the“source“of“t˜ypGe“failures“not“detected“b˜yŽ¡static–?}tš¸ãypGe“c˜hec˜king,‘zÇif‘^Äthe“reference“primitiv˜es“are“treated“as“ordinary“pGolymorphic“v‘ÿqÇalues.‘0@A‘?AstandardŽ¡example‘UUisŽ©ný‘,ÂÂlet–¹–val“x“=“ref(fn“x“=>“x)Ž¤‘æXin–¹–x“:=“(fn“x“=>“x+1)Ž¡‘!!x‘¹–trueŽ¡‘,ÂendŽ¤nýÄThe–|êbasic“principle“wš¸ãe“use“to“a˜v˜oid“suc˜h“errors“is“that“the“con˜ten˜ts“of“an“Çactual“Äreference“m˜ust“ha˜v˜e“monomor-ŽŸphic–UUtš¸ãypGe.‘qÇTherefore,“declarations“suc˜h“as:Ž¦Âval–¹–x“=“ref“[]Ž¡Äare–ùxillegal“and“will“cause“an“error“message.‘S(A‘ùafunction,›Ølik¸ãe“ÊrefÄ,˜that“directly“or“indirectly“creates“referencesŽŸcan›UUha•¸ãv“e˜a˜pGolymorphic˜t“yp•Ge,˜but˜of˜a˜sp“ecial˜kind.‘qÇTh•¸ãus˜the˜t“ypGe˜of˜the˜ref˜constructor˜itself˜isŽ¦Âval–¹–ref“:“'1a“->“'1a“refŽ¡Äwhere–…the“tš¸ãypGe“v‘ÿqÇariable“Ê'1a“Äis“a“\w˜eak“t˜ypGe“v‘ÿqÇariable“of“degree“1."‘FBasically‘ÿ*ª,‘‘Šthis“t˜ypGe“indicates“that“whenŽ¤the–ºßfunction“Êref“Äis“applied,‘ÔBits“instanš¸ãtiation“m˜ust“bGe“giv˜en“a“ground“t˜ypGe.‘¢fBut“the“notion“of“ground“t˜ypGeŽ¡mš¸ãust–ŸbGe“in˜terpreted“relativ˜e“to“the“con˜text,‘ß÷e.g.‘@àbGound“t˜ypšGe“v‘ÿqÇariables“can“b˜e“viewš¸ãed“as“t˜ypGe“constan˜ts“withinŽ¡the–UUscopGe“of“their“binding.‘qÇF‘ÿ*ªor“example:Ž¦Âfun–¹–f“(x“:“'1a)“=“ref“[x]ŽŸnýÄis–“¬ok,‘£Bevš¸ãen“though“the“t˜ypGe“of“the“em˜bšGedded“ref“expression“is“Ê'1a–?ýlist“refÄ,‘£Bb˜ecause–“¬Ê'1a“Äis“a“b˜ound“t¸ãyp˜eŽ¡v‘ÿqÇariable–UUin“this“conš¸ãtext.‘qÇThe“t˜ypGe“of“the“function“Êf“Äis“Ê'1a–?ý->“'1a“list“refÄ.Ž©‘The–ª“degree“of“w¸ãeakness“(or“pšGerhaps“Çstr‘ÿ}'ength“Äis“a“b˜etter“term)“of“a“t¸ãyp˜e“v‘ÿqÇariable“re
ects“the“n•¸ãum“b˜er‘ª“ofŽ¡lamš¸ãbGda–Pªabstractions“that“ha˜v˜e“to“bGe“cancelled“b˜y“application“bGefore“the“reference“ob‘Ž8ject“is“actually“createdŽ¡and–ظthat“tš¸ãypGe“v‘ÿqÇariable“m˜ust“bGe“monomorphically“instan˜tiated.‘ûðOrdinary“t˜ypšGe“v‘ÿqÇariables“can“b˜e“consideredŽ¡to›”áha•¸ãv“e˜strength˜innit“y‘ÿ*ª.‘0jEac“h˜application˜w“eak“ens˜the˜opGerand˜t“ypGe˜another˜step,‘¤Äand˜when˜the˜strengthŽ¡of– a“t¸ãypšGe“v‘ÿqÇariable“b˜ecomes“0“it“m¸ãust“b˜e“eliminated“bš¸ãy“instan˜tiation“to“a“ground“t˜ypGe;‘*2w˜eak“t˜ypGe“v‘ÿqÇariables“ofŽ¡degree–´šzero“are“not“allo•¸ãw“ed–´šin“a“top-levš¸ãel“t˜ypGe.‘<4Con˜v˜ersely‘ÿ*ª,‘ÔÀeac˜h“surrounding“lam˜bGda“abstraction“strengthensŽ¡t¸ãypGe‘UUv‘ÿqÇariables.Ž¦‘F‘ÿ*ªor‘UUexample,Ž©nýÂ-–¹–val“g“=“(fn“x“=>“(fn“y“=>“(ref“x,“ref(x,y))));Ž¤val–¹–g“=“fn“:“'2a“->“'2b“->“('2a“ref“*“('2a“*'2b)“ref)Ž¡-–¹–val“h“=“g(nil);Ž¡val–¹–h“=“fn“:‘	s,'1a“->“('1b“list“ref“*“('1b“list“*“'1a)“ref)Ž¡-–¹–h“true;Ž¡std_in:4.1-4.6–¹–Error:“nongeneric“weak“type“variableŽ¡‘	s,it–¹–:“'0Z“list“ref“*“('0Z“list“*“bool)“refŽŸnýÄbutŽ¦Â-–¹–(h“true)“:“int“list“ref“*“(int“list“*“bool)“ref;Ž¡val–¹–it“=“(ref“[],ref“([],true))“:“int“list“ref“*“(int“list“*“bool)“refŽŸnýÄThe–UUtš¸ãypGe“constrain˜t“is“necessary“to“instan˜tiate“the“w˜eak“t˜ypGe“v‘ÿqÇariable“Ê'1c“Äwhen“Êh“Äis“applied.ŽŸ‘If–uûa“compGonenš¸ãt“of“a“structure“has“a“w˜eak“pGolymorphic“t˜ypšGe,‘¢§then“the“corresp˜onding“signature“sp˜ecicationŽ¤should›¿}ha•¸ãv“e˜at˜least˜as˜w“eak˜a˜t“ypGe.‘°>That˜is,‘Úthe˜strength˜of˜t“yp•Ge˜v‘ÿqÇariables˜in˜the˜signature˜should˜b“e˜noŽ¡greater–UUthan“that“in“the“correspšGonding“structure“comp˜onen¸ãt.ŽŽŸ’ÖiGUIDE-5ŽŽŒ‹Sh ¡3ڍ ýEÌ& œ3ڍ ý†Ì&ÉCompatibilit®9y‘ÿ
«.‘
8àÇThe–ADenition“of“Standar‘ÿ}'d“ML‘åÄdescribšGes–å1a“less“p˜o•¸ãw“erful–å1system“for“t•¸ãyp˜ec“hec“king‘å1refer-Ž¤ences.›…ÒThe–®ÇDenition‘þúP's“Ä\underscore"“t¸ãypGe“v‘ÿqÇariables“Ê'_aÄ,–3Ê'_bÄ,“etc.˜are–®equiv›ÿqÇalen¸ãt“to“v˜ariables“of“strengthŽ¡1,–êCthat›™Gis,“Ê'1aÄ,“Ê'1bÄ.‘=œF–ÿ*ªor˜compatibilit¸ãy“,‘êCSML/NJ‘˜óaccepts˜programs˜using˜the˜underscore˜notation;‘;@and,Ž¡if–})ÊSystem.Control.weakUnderscore“Äis“set“to“true,‘Çalso“prinš¸ãts“w˜eak“t˜ypGe“v‘ÿqÇariables“using“the“underscoreŽ¡notation.ŽŸþ6ÉW‘ÿ
«eak–óÉv‘ÿ\rariables“and“exceptions.‘
ÄIf–oÑthe“declared“argumenš¸ãt“t˜ypGe“of“an“exception“constructor“con˜tains“aŽ¡tš¸ãypGe–¶ùv‘ÿqÇariable,‘Ö¥then“that“t˜ypšGe“v‘ÿqÇariable“is“b˜ound“in“the“appropriate“surrounding“con¸ãtext“according“to“the“usualŽ¡rules.‘:·F‘ÿ*ªurthermore,‘©the–˜Ptš¸ãypGe“v‘ÿqÇariable“m˜ust“bGe“a“w˜eak“v‘ÿqÇariable“of“the“same“degree“as“it“w˜ould“ha˜v˜e“w˜ere“itŽ¡assošGciated–ï§with“a“ref“argumen¸ãt“at“that“p˜oinš¸ãt“(i.e.‘Oâits“w˜eakness“m˜ust“agree“with“the“abstraction“degree“at“theŽ¡pšGoin¸ãt–,:of“the“exception“declaration.)‘dThis“is“b˜ecause“the“creation“of“an“exception“constructor“is“conceptuallyŽ¡similar–Ù!to“the“creation“of“a“reference“v‘ÿqÇalue“in“that“bšGoth“can“b˜e“used“to“transmit“v‘ÿqÇalues“b˜et•¸ãw“een›Ù!t“w“o˜textuallyŽ¡unrelated–UUpGoin¸ãts“in“the“program.ŽŸ‘It–mØis“bšGest“if“the“t¸ãyp˜e“v‘ÿqÇariable“o˜ccurring“in“the“exception“declaration“had“already“b˜een“in¸ãtro˜duced“b¸ãyŽ¡appšGearance–UUin“a“t¸ãyp˜e“constrainš¸ãt“on“a“lam˜bGda“binding,“as“in“the“follo˜wing“example.Ž©Âfun–¹–f(l:“'1a“list,“p:“'1a“->“bool)“=Ž¤‘æXlet–¹–exception“E“of“'1a“listŽ¡‘%Ì°fun–¹–search(x::r)“=“if“p“x“then“raise“E“r“else“search“rŽ¡‘/?Ü|–¹–search“[]“=“[]Ž¡‘Ÿîin–¹–search“r“handle“E“l“=>“lŽ¡‘æXendŽŸÄAs–µãan“exercise,‘ÕÆshoš¸ãw“ho˜w“this“rule“prev˜en˜ts“the“usual“t˜ypGe“insecurit˜y“example“assošGciated“with“\p˜olymorphic"ŽŸreferences:Ž¦‘%Ì°Âlet–¹–val“(r,h)“=Ž¡‘8³let–¹–exception“E“of“'aŽ¡‘=lžin–¹–((fn“x“=>“raise“x),“(fn“f“=>“f()“handle“E“y“=>“y))Ž¡‘8³endŽŸ(þ6Û3.5Ž‘ÀHigher-order‘€Mo`dulesŽŸuTÄThe–¢<mošGdule“system“of“Standard“ML‘¡æhas“supp˜orted“Çrst-or‘ÿ}'der“Äparametric“mo˜dules“in“the“form“of“Çfunc-Ž¤tors‘Ò!Ä.‘
ݸBut–yPthere“are“oGccasions“when“one“likš¸ãe“to“parameterize“o˜v˜er“functors“as“w˜ell“as“structures,Ž¡whic¸ãh–ûrequires“a“truly“higher-order“moGdule“system“(see,›pãfor“instance,˜the“pGo•¸ãw“erset–ûfunctor“example“inŽ¡Êdoc/examples/powerset.smlÄ.‘93SML/NJ‘«mno•¸ãw›«˜pro“vides˜an˜expGerimen“tal˜higher-order˜extension˜of˜the˜moGduleŽ¡system.ŽŸ‘P•¸ãarameterization›í•o“v“er˜functors˜can˜bGe˜pro“vided˜in˜a˜straigh“tforw“ard˜w“a“y˜b“y˜allo“wing˜functors˜to˜bGe˜com-Ž¡pGonenš¸ãts–&of“structures.‘]
Syn˜tactically“this“can“bGe“accomplished“merely“b˜y“allo˜wing“functor“declarations“insideŽ¡of–„structure“b•Go“dies,‘Jand–„bš¸ãy“pro˜viding“syn˜tax“for“functor“spšGecications“in“signatures.‘ÿFF‘ÿ*ªunctor“sp˜ecicationsŽ¡wš¸ãere–8žalready“part“of“the“moGdule“syn˜tax“of“the“Denition“of“Standard“ML‘8c(Figure“8,–qpp.‘¢14),“so–8žw˜e“ha˜v˜eŽ¡implemenš¸ãted–ËÑthat“syn˜tax“and“added“it“to“the“Çsp–ÿ}'e“c–ËÑÄclass“(Figure“7,›épp.–Õ;13).“In–ËÑaddition,˜it“is“con•¸ãv“enien“t‘ËÑtoŽ¡ha•¸ãv“e–fa“w•¸ãa“y–fof“declaring“functor“signatures“and“some“syn¸ãtactic“sugar“for“curried“functor“denitions“and“partialŽ¡application– Zof“curried“functors,‘*òso“these“ha•¸ãv“e– Zalso“bGeen“proš¸ãvided.‘`This“extension“is“an“\up˜w˜ard-compatible"Ž¡enric•¸ãhmen“t–UUof“the“language“that“should“break“no“existing“programs.ŽŸþ6ÉF‘ÿ
«unctors–±þas“structure“compQÇonen®9ts.‘
ÄIn–6›the“extended“language,‘<Àa“signature“can“con¸ãtain“a“functor“spGec-Ž¡ication:ŽŽŸ’ÖiGUIDE-6ŽŽŒ‹b ¡3ڍ ýEÌ& œ3ڍ ý†Ì&Âsignature–¹–SIG“=Ž¤sigŽ¡‘	s,type‘¹–tŽ¡‘	s,val–¹–a“:“tŽ¡‘	s,functor–¹–F(X:“sig“type“sŽ¡‘YÆ"val–¹–b:“sŽ¡‘FßÊend)–¹–:“sig“val“x“:“t“*“X.s“endŽ¡endŽ©ÄT‘ÿ*ªo–UUmatcš¸ãh“suc˜h“a“signature,“a“structure“is“allo˜w˜ed“to“con˜tain“a“functor“declaration:ŽŸÂstructure–¹–S“:“SIG“=Ž¡structŽ¡‘	s,type–¹–t“=“intŽ¡‘	s,val–¹–a“=“3Ž¡‘	s,functor–¹–F(X:“sig“type“s“val“b:“s“end)“=Ž¡‘æXstruct–¹–val“x“=“(a,X.b)“endŽ¡endŽ¦ÄThis–makš¸ães“it“pGossible“higher-order“functors“b˜y“including“a“functor“as“a“compGonen˜t“of“a“parameter“structureŽŸor–UUof“a“result“structure.‘qÇThe“case“of“a“functor“parameter“is“illustrated“bš¸ãy“the“follo˜wing“example.ŽŸÂsignature–¹–MONOID“=Ž¡sigŽ¡‘	s,type‘¹–tŽ¡‘	s,val–¹–plus:“t*t“->“tŽ¡‘	s,val–¹–e:“tŽ¡end;Ž¡(*–¹–functor“signature“declaration“*)Ž¡funsig–¹–PROD“(structure“M:“MONOIDŽ¡‘=lžstructure–¹–N:“MONOID)“=“MONOIDŽ¡functor–¹–Square(structure“X:“MONOIDŽ¡‘FßÊfunctor–¹–Prod:“PROD):“MONOID“=Ž¡‘æXProd(structure–¹–M“=“XŽ¡‘*†Fstructure–¹–N“=“X);Ž¦ÄNote–ʼthat“this“example“in•¸ãv“olv“es–ʼthe“denition“of“a“Çfunctor‘ënsignatur‘ÿ}'e‘‹ÊPRODÄ.“Curren¸ãtly“functor“signatureŽŸdeclarations–UUtakš¸ãe“one“of“the“follo˜wing“forms:ŽŸÂfunsig–ÒÀfunid›¹–Â(ÀstridÂ:“Àsigexp‘‘'Â)˜=“ÀsigexpŽ¡Âfunsig‘ÒÀfunid›¹–Â(Àsp•‡e“csÂ)˜=‘ÒÀsigexpŽ¦ÄThis–Ôsynš¸ãtax“is“view˜ed“as“pro˜visional“and“sub‘Ž8ject“to“c˜hange.‘F¬P˜ossible“alternativ˜e“notations“(for“the“rst“form)ŽŸare:ŽŸÂfunsig–¹–Àfunid“Â=“(ÀstridÂ:‘ÒÀsigexp‘‘'Â)“ÀsigexpŽ¡Âfunsig–¹–Àfunid“Â=“(ÀstridÂ:‘ÒÀsigexp‘‘'Â)“=>“ÀsigexpŽ¦ÄA‘ºæcommon–»
use“of“functors“returning“functors“in“their“result“is“to“approš¸ãximate“a“curried“functor“with“m˜ultipleŽŸparameters.‘qÇHere–UUis“hoš¸ãw“one“migh˜t“dene“a“curried“monoid“proGduct“functor:ŽŽŸ’ÖiGUIDE-7ŽŽŒ‹q… ¡3ڍ ýEÌ& œ3ڍ ý†Ì&Âfunctor–¹–CurriedProd“(M:“MONOID)“=Ž¤structŽ¡‘	s,functor–¹–Prod1“(N:“MONOID)“:“MONOID“=Ž¡‘æXstructŽ¡‘Y„type–¹–t“=“M.t“*“N.tŽ¡‘Y„val–¹–e“=“(M.e,“N.e)Ž¡‘Y„fun‘¹–plus((m1,n1),(m2,n2))=(M.plus(m1,m2),N.plus(n1,n2))Ž¡‘æXend;Ž¡endŽ©îýÄThis–=Åwš¸ãorks,‘wàbut“the“partial“application“of“this“functor“is“rather“a˜wkw˜ard“bGecause“it“requires“the“explicitŽŸcreation–UUof“an“in¸ãtermediate“structure:ŽŸîýÂstructure–¹–IntMonoid“=Ž¡structŽ¡‘	s,type–¹–t“=“intŽ¡‘	s,val–¹–e“=“0Ž¡‘	s,val–¹–plus“=“(op“+):“int*int“->“intŽ¡end;Ž¡structure–¹–Temp“=“CurriedProd(IntMonoid);Ž¡functor–¹–ProdInt“=“Temp.Prod1;Ž¦ÄT‘ÿ*ªo–ç½simplify“the“use“of“this“sort“of“functor,‘Wsome“derivš¸ãed“forms“pro˜vide“syn˜tactic“sugar“for“curried“functorŽ©denition–UUand“partial“application.‘qÇThš¸ãus“the“abGo˜v˜e“example“can“bGe“written:ŽŸîýÂfunctor–¹–CurriedProd“(M:“MONOID)“(N:“MONOID)“:“MONOID“=Ž¡structŽ¡‘	s,type–¹–t“=“M.t“*“N.tŽ¡‘	s,val–¹–e“=“(M.e,“N.e)Ž¡‘	s,fun‘¹–plus((m1,n1),(m2,n2))=(M.plus(m1,m2),N.plus(n1,n2))Ž¡end;Ž¡functor–¹–ProdInt“=“CurriedProd(IntMonoid);ŽŸîý‘ÄThe–D#syn¸ãtax“for“curried“forms“of“functor“signature“and“functor“declarations“and“for“the“correspGondingŽ¦partial–UUapplications“can“bGe“summarized“as“follo¸ãws:Ž©îýÂfunsig–¹–Àfunsigid“Â(ó5ùž"		cmmi9¾parŸÿÿó¹Aa¨cmr6¯1Ž‘*§Â)“¾:–Šª:“:ŽŽ‘È|Â(¾parŸÿÿó;Îcmmi6°nŽ‘7Â)“=‘ÒÀsigexpŽ¡Âfunctor–¹–Àfunid“Â(¾parŸÿÿ¯1Ž‘*§Â)“¾:–Šª:“:ŽŽ‘È|Â(¾parŸÿÿ°nŽ‘7Â)“=‘ÒÀstr‡expŽ¡Âfunctor–¹–Àfunid1“Â=“Àfunid2“Â(¾aršAÇgŸÿÿ¯1Ž‘*§Â)“¾:–Šª:“:ŽŽ‘È|Â(¾ar˜gŸÿÿ°nŽ‘7Â)Ž¡structure–¹–Àstrid“Â=“Àfunid“Â(¾aršAÇgŸÿÿ¯1Ž‘*§Â)“¾:–Šª:“:ŽŽ‘È|Â(¾ar˜gŸÿÿ°nŽ‘7Â)ŽŸîýÄwhereŽ¦–N<Àpš‡ar‘±–Â::=‘ÒÀid‘ìpÂ~:~“Àsigexp‘‘'Â~|~“Àsp˜e˜csŽ¡‘N<ar•‡g‘†ëÂ::=›ÒÀstr“exp‘¹–Â|˜Àde“cÂ.ŽŸîýÄIn–’Ythe“case“of“a“partial“application“dening“a“functor,‘¡šit“is“assumed“that“the“Çfunid2“Äon“the“righ¸ãt“hand“sideŽ¤takš¸ães–Eémore“than“Ån“Äargumen˜ts,‘‚while“in“the“case“of“the“structure“declaration“Çfunid“Äshould“tak˜e“exactly“ÅnŽ¡Äargumenš¸ãts.‘qÇAs–UUa“degenerate“case“where“Ån–ÇÄ=“0–UUw˜e“ha˜v˜e“iden˜tit˜y“functor“declarations:Ž¦Âfunctor–¹–Àfunid1“Â=“Àfunid2ŽŸîýÄThere–UUis“also“a“"let"“form“of“functor“expression:Ž¦‘N<Àfctexp‘J½Â::=‘	s,let–ÒÀde‡c‘	òHÂin“Àfctexp‘
SÂendŽŽŸ’ÖiÄGUIDE-8ŽŽŒ‹	xó ¡3ڍ ýEÌ& œ3ڍ ý†Ì&Äwhic¸ãh–UUcan“only“bGe“used“in“functor“denitions“of“the“form:Ž¤VZÂfunctor–¹–Àfunid“Â=“let–ÒÀde‡c‘8²Âin“Àfctexp‘J½Âend.ŽŸVZ‘ÄThe–UUcurried“functor“declarationŽ¡Âfunctor–¹–F“(¾parŸÿÿ¯1Ž‘*§Â)“¾:–Šª:“:ŽŽ‘È|Â(¾parŸÿÿ°nŽ‘7Â)“=‘ÒÀstr‡expŽ©VZÄis–UUa“derivš¸ãed“form“that“is“translated“in˜to“the“follo˜wing“declarationŽ¡Âfunctor–¹–F“(¾parŸÿÿ¯1Ž‘*§Â)“=Ž¤structŽ¡‘	s,functor–¹–%fct%“(¾parŸÿÿ¯2Ž‘*§Â)“¾:–Šª:“:ŽŽ‘È|Â(¾parŸÿÿ°nŽ‘7Â)“=‘ÒÀstr‡expŽ¡ÂendŽ¦Äand–UUthe“declarationsŽŸVZÂstructure–¹–S“=“F“(¾aršAÇgŸÿÿ¯1Ž‘*§Â)“¾:–Šª:“:ŽŽ‘È|Â(¾ar˜gŸÿÿ°nŽ‘7Â)Ž¡functor–¹–G“=“F“(¾aršAÇgŸÿÿ¯1Ž‘*§Â)“¾:–Šª:“:ŽŽ‘È|Â(¾ar˜gŸÿÿ°nŽ‘7Â)Ž¦Äare–UUderivš¸ãed“forms“expanding“in˜to“(respGectiv˜ely):ŽŸVZÂlocalŽ¡‘	s,structure–¹–%hidden%“=“F“(¾arAÇgŸÿÿ¯1Ž‘*§Â)Ž¡inŽ¡‘	s,structure–¹–S“=“%hidden%.%fct%“(¾aršAÇgŸÿÿ¯2Ž‘*§Â)“¾:–Šª:“:ŽŽ‘È|Â(¾ar˜gŸÿÿ°nŽ‘7Â)Ž¡endŽ¦ÄandŽŸVZÂlocalŽ¡‘	s,structure–¹–%hidden%“=“F“(¾aršAÇgŸÿÿ¯1Ž‘*§Â)“¾:–Šª:“:ŽŽ‘È|Â(¾ar˜gŸÿÿ°nŽ‘7Â)Ž¡inŽ¡‘	s,functor–¹–G“=“%hidden%.%fct%Ž¡endŽ¦ÄCurrenš¸ãtly–ãthere“is“no“c˜hec˜king“that“a“complete“set“of“argumen˜ts“is“supplied“when“a“curried“functor“is“appliedŽŸto–UUdene“a“structure,“as“illustrated“bš¸ãy“the“follo˜wing“example:ŽŸVZÂfunctor–¹–Foo“(X:“sig“type“s“end)“(Y:“sig“type“t“end)“=Ž¡struct–¹–type“u“=“X.s“*“Y.t“endŽ¡structure–¹–A“=“struct“type“s“=“int“endŽ¡structure–¹–S“=“Foo“(A)‘	s,(*“Foo“A“yields“a“(useless)“structure“*)Ž¡functor–¹–G“=“Foo“(A)‘æX(*“Foo“A“yields“a“functor“*)Ž¦ÄOf–qucourse,›x~the“structure“ÊS‘qnÄdened“in“this“w•¸ãa“y–quis“useless,˜since“wš¸ãe“cannot“use“the“pseudo-iden˜tier“Ê%fct%“ÄtoŽ¤select–UUits“functor“compGonen•¸ãt.‘qÇArit“y›UUc“hec“king˜to˜prev“en“t˜this˜sort˜of˜error˜will˜bGe˜added˜in˜a˜future˜release.ŽŸ Ù±Û3.6Ž‘ÀDiscrepancies›€b`et• w“een˜SML/NJ˜and˜the˜DenitionŽŸuTÄThe–!?basic“en•¸ãvironmen“t–!?of“SML‘!2of“New“Jersey“is“a“large“supšGerset“of“the“initial“basis“describ˜ed“in“App˜endicesŽ¡C–UUand“D“of“the“Denition“of“Standard“ML“(Milner/T‘ÿ*ªofte/HarpGer)“and“diers“from“it“in“v‘ÿqÇarious“w•¸ãa“ys:ŽŸ+ð‘ÿÿÆŽŽŽ‘ÄThe–UUarithmetic“o•¸ãv“er
o“w‘UUexceptions:ŽŽŸ’ÖiGUIDE-9ŽŽŒ‹
‚ ¡3ڍ ýEÌ& œ3ڍ ý†Ì&‘$@É{ŽŽŽ‘/ÊSumÄ,–UUÊProdÄ,“ÊDiffÄ,“ÊNegÄ,“ÊExpÄ,“ÊFloor“Äare“all“equiv‘ÿqÇalen¸ãt“to“ÊOverflowÄ.ŽŸ‘$@É{ŽŽŽ‘/ÊDiv–UUÄand“ÊMod“Äare“equiv‘ÿqÇalen¸ãt“to“ÊDiv“Äand“distinct“from“ÊOverflowÄ.Ž¤‘ÿÿÆŽŽŽ‘ÄThe–UUopšGerator“\Ê@Ä"“(list“app˜end)“is“righ•¸ãt-asso˜ciativ“e.Ž¡‘ÿÿÆŽŽŽ‘ÄStrings–UUcarried“bš¸ãy“the“Io“exception“are“more“informativ˜e.Ž¤‘The–„Clanguage“implemenš¸ãted“b˜y“SML/NJ‘ƒõalso“diers“from“that“describGed“in“the“Denition.‘þ’Here“is“aŽ©partial–UUlist“of“the“discrepancies:Ž¡‘ÿÿÆŽŽŽ‘ÄDieren•¸ãt›UUrigh“t-assoGciativ“e˜op•Gerators˜of˜the˜same˜precedence˜asso“ciate˜to˜the˜righ¸ãt.ŽŸ‘ÿÿÆŽŽŽ‘Ä"ÊlocalÄ"–y#and“"ÊopenÄ"“spGecications“in“signatures“ha•¸ãv“e–y#a“more“limited“seman¸ãtics“than“in“the“denition.‘(aAŽ¦‘spšGecication–њ\Êopen‘?ýAÄ"‘Ñyin“a“signature“merely“allo¸ãws“abbreviated“names“for“comp˜onen¸ãts“of“the“structureŽ¦‘A‘·Éin–·âlater“spGecications“(Çe.g.›™oÊt“Äfor“ÊA.tÄ).˜It“došGes“not“in¸ãtro˜duce“an¸ãy“sp˜ecications“in¸ãto“the“signature.Ž¦‘The–՟Êlocal“ÄspGecication“form“is“only“partially“implemenš¸ãted“for“compatibilit˜y‘ÿ*ª,‘ï*and“a“w˜arning“message“isŽ¦‘issued–éYwhen“it“is“used.‘MÈSignatures“using“these“constructs“in“the“folloš¸ãwing“st˜yle“will“bGeha˜v˜e“as“expGected:ŽŸ‘+æXÂsignature–¹–S“=Ž¤‘+æXsigŽ¡‘5Y„Àsp•‡e“csŽ¡‘5Y„ÂlocalŽ¡‘>Ì°open–¹–A“B“¾:–Šª:“:ŽŽŽ¡‘5Y„ÂinŽ¡‘>Ì°Àsp•‡e“csŽ¡‘5Y„ÂendŽ¡‘+æXendŽŸ‘ÿÿÆŽŽŽ‘ÄThe–‚Mequalitš¸ãy“sym˜bšGol“\Ê=Ä"“can“b˜e“re-b˜ound“(though“usually“with“a“w¸ãarning“message).‘ø¯It“is“not“a“go˜o˜dŽ¦‘idea–UUto“do“so.Ž¤‘ÿÿÆŽŽŽ‘ÄThe–:~declaration“construct“\Êval›?ý...“and“rec˜...Ä"“is“not“pGermitted;‘Cpthe“Êrec“Ämš¸ãust“immediately“follo˜wŽ¦‘the‘UUÊvalÄ.Ž¡‘ÿÿÆŽŽŽ‘ÄMultiple–\×spGecications“of“a“name“(in“the“same“name“space)“are“not“allo•¸ãw“ed–\×in“signatures,‘^·except“thatŽ¦‘certain–!à\compatible"“respšGecications“of“a“t¸ãyp˜e“constructor“are“allo•¸ãw“ed–!àto“mak¸ãe“Êinclude“Äsp˜ecicationsŽ¦‘more‘UUuseful.ŽŸ&čâ4Ž‘ÖÿSML/NJ–…Compiler“NotesŽŸçÉProgram‘¾õoptimization‘
ÄEacš¸ãh– }compilation“unit“is“compiled“separately‘ÿ*ª.‘Ó>None“of“the“optimizations“tak˜eŽ¦place–UUacross“compilation-unit“bGoundaries.‘qÇExample:ŽŸÂfun–¹–f(x)“=“(x,x);ŽŸfun–¹–g“0“=“nil“|“g“i“=“f“i“::“g(i-1);ŽŸÄThese–P¸are“t•¸ãw“o–P¸compilation“units“if“tš¸ãypGed“at“top“lev˜el,‘Q¤or“if“loaded“from“a“le“bGecause“at“the“rst“semicolon,Ž¦the–ŸÇfunction“f“is“compiled,›Äand“then“at“the“next“semicolon,˜g“is“compiled.‘5CThe“function“g“will“run“signican¸ãtlyŽ¦faster–UUif“anš¸ãy“of“the“follo˜wing“is“used“instead:ŽŽŸ’Ó‚hGUIDE-10ŽŽŒ‹‹ž ¡3ڍ ýEÌ& œ3ڍ ý†Ì&‘æXÂfun–¹–f(x)“=“(x,x)Ž¤‘æXfun–¹–g“0“=“nil“|“g“i“=“f“i“::“g(i-1);Ž¡¡‘æXlocalŽ¡‘Y„fun–¹–f(x)“=“(x,x);Ž¡‘æXinŽ¡‘Y„fun–¹–g“0“=“nil“|“g“i“=“f“i“::“g(i-1)Ž¡‘æXend;Ž¡¡‘æXstructure–¹–S“=Ž¡‘Y„structŽ¡‘%Ì°fun–¹–f(x)“=“(x,x);Ž¡‘%Ì°fun–¹–g“0“=“nil“|“g“i“=“f“i“::“g(i-1);Ž¡‘Y„end;ŽŸÄIn–UUeither“of“these“last“t•¸ãw“o,–UUof“course,“the“semicolons“are“optional.Ž©‘Moral–áof“the“story:‘‰Tuse“small“compilation“units“while“tš¸ãyping“to“the“in˜teractiv˜e“system“and“seeing“ho˜wŽ¤things–Ùáw¸ãork.›ÿkUse“larger“compilation“units“when“compiling“large“programs.˜W‘ÿ*ªe“recommend“the“use“of“theŽ¡moGdule–UUsystem,“or“of“Êlet“Äand“Êlocal“Ädeclarations,“to“bind“things“together“in“a“wš¸ãell-structured“w˜a˜y‘ÿ*ª.Ž¦‘The–q`use“of“signature“constrainš¸ãts“to“minimize“the“n˜um˜bšGer“of“things“exp˜orted“from“structures“will“reduceŽ¡memory–UUusage,“maš¸ãy“impro˜v˜e“optimization,“and“is“just“clean“st˜yle.ŽŸþ6ÉF‘ÿ
«or–ýðthe“spQÇeed“fanatic:‘
ÄThe–x¥initial“en•¸ãvironmen“t–x¥(i.e.,›ythe“ÊListÄ,˜ÊArrayÄ,˜ÊRefÄ,˜etc.‘Û·structures)“is“normallyŽ¡in–o
a“separate“moGdule“from“the“user“program.‘¾æIf“yš¸ãou“w˜ould“lik˜e“a“cop˜y“of“this“stu“in“y˜our“program“so“thatŽ¡calls–9‡to“the“pGerv‘ÿqÇasivš¸ãe“functions“will“ha˜v˜e“less“o˜v˜erhead,‘r“textually“insert“Êsrc/boot/fastlib.sml“Änear“theŽ¡bGeginning–Ò2of“yš¸ãour“o˜wn“structure.‘FThis“only“helps,›ìlof“course,˜if“Êfastlib.sml“Äis“put“in¸ãto“the“same“compilationŽ¡unit–UUas“the“functions“calling“it,“using“the“mošGdule“system“as“describ˜ed“ab˜o•¸ãv“e.Ž¦‘In–äsome“cases,‘G½yš¸ãou“can“impro˜v˜e“pGerformance“b˜y“com˜bining“sev˜eral“compilation“units“in˜to“one.‘	õF‘ÿ*ªorŽ¡example,‘#Hafter–Äyš¸ãou“ha˜v˜e“dev˜elopGed“y˜our“program“as“a“set“of“top-lev˜el“structures,‘#Hnest“the“whole“thing“in“oneŽ¡h¸ãuge–UUstructure,“e.g.,ŽŸÂstructure–¹–Whole“=Ž¤‘	s,structŽ¡‘æXÀyour‘N<pr•‡o“gr“amŽ¡‘	s,ÂendŽŸÄY‘ÿ*ªou–¡žcan“evš¸ãen“put“signatures“and“functors“at“top“lev˜el“inside“suc˜h“a“structure,‘ŏalthough“this“is“not“\Standard"Ž¤ML.Ž¦‘This– Átecš¸ãhnique“will“increase“compilation“time“and“compilation“memory“usage“substan˜tially‘ÿ*ª,‘S›Éand–¿Cit“isŽ¡not–ÕTguaranš®9teed“to“impro˜v˜e“execution“time.ŽŽŸ’Ó‚hÄGUIDE-11ŽŽŒ‹–— ¡3ڍ ýEÌ& œ3ڟ’Ó‚hÄGUIDE-12ŽŽŒøŸÁƒ’À;è¡3ÚÕÁGóIŒ-ø

cmcsc10óHò"V½p
cmbx10ó>Kñ`y½p
cmr10ó<ò"VG®
cmbx10ó7ò"Vff
cmbx10ó4Kñ`yff
cmr10ó0ÂÖN cmbx12ó+X«Qcmr12óßê<x

cmtt10óò"V

cmbx10óý':

cmti10ó!",š

cmsy10ó b>

cmmi10óKñ`y

cmr10óߤN		cmtt9ó¼j‘¹		cmti9ó5ùž"		cmmi9ó
O!â…cmsy7ó	0e—rcmmi7óٓ Rcmr7ó;Îcmmi6ó¹Aa¨cmr6ù ßßßßßß

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0