ML Basis system for multi-file project
LunarML supports ML Basis system compatible with MLton and MLKit.
Syntax
Comments are ML-like: between (* .. *) and can be nested.
<basexp> ::= 'bas' <basdec> 'end'
| 'let' <basdec> 'in' <basexp> 'end'
| <identifier>
<basdec> ::= (* empty *)
| <basdec> ';'? <basdec>
| 'basis' <identifier> '=' <basexp> ('and' <identifier> '=' <basexp>)*
| 'open' <identifier>+
| 'local' <basdec> 'in' <basdec> 'end'
| 'structure' <identifier> ('=' <identifier>)? ('and' <identifier> ('=' <identifier>)?)*
| 'signature' <identifier> ('=' <identifier>)? ('and' <identifier> ('=' <identifier>)?)*
| 'functor' <identifier> ('=' <identifier>)? ('and' <identifier> ('=' <identifier>)?)*
| 'ann' <string>+ 'in' <basdec> 'end'
| <path.sml> | <path.sig> | <path.fun>
| <path.mlb>
An MLB file consists of <basdec>.
Available annotations
nonexhaustiveBind {warn|error|ignore}nonexhaustiveMatch {warn|error|ignore}nonexhaustiveRaise {ignore|warn|error}redundantBind {warn|error|ignore}redundantMatch {warn|error|ignore}redundantRaise {warn|error|ignore}sequenceNonUnit {ignore|warn|error}valDescInComments {ignore|warn|error}allowDoDecls {true|false}allowExtendedConsts {true|false}allowExtendedNumConsts {true|false}allowExtendedTextConsts {true|false}
allowLineComments {true|false}allowOptBar {true|false}allowOptSemicolon {true|false}allowRecordPunExps {true|false}allowSigWithtype {true|false}allowVectorExpsAndPats {true|false}allowVectorExps {true|false}allowVectorPats {true|false}
allowRecordExtension {true|false}allowRecordUpdate {true|false}allowUtfEscapeSequences {true|false}allowHexFloatConsts {true|false}allowValRecTyVars {true|false}allowValTyVarsRec {true|false}allowFreeTyVarsInTypeDec {true|false}allowWhereAndType {true|false}allowInfixingDot {false|true}allowSuccessorML {true|false}This is a combination of the following annotations:
allowDoDecls <value>allowExtendedNumConsts <value>allowExtendedTextConsts <value>allowLineComments <value>allowOptBar <value>allowOptSemicolon <value>allowRecordPunExps <value>allowSigWithtype <value>allowRecordExtension <value>allowRecordUpdate <value>allowValRecTyVars <value>allowValTyVarsRec <not value>allowFreeTyVarsInTypeDec <not value>allowWhereAndType <not value>
The default value for an annotation could be specified by --default-ann option.
Available libraries
$(SML_LIB)/basis/basis.mlb: SML Basis Library$(SML_LIB)/basis/unsafe.mlb: Unsafe structure$(SML_LIB)/basis/lunarml.mlb: LunarML structure$(SML_LIB)/basis/lua.mlb: Lua structure$(SML_LIB)/basis/javascript.mlb: JavaScript structure$(SML_LIB)/basis/pipe.mlb: Pipe operator$(SML_LIB)/mlyacc-lib/mlyacc-lib.mlb$(SML_LIB)/smlnj-lib/Util/smlnj-lib.mlb
Path variables
You can use --mlb-path-map=<file> option and --mlb-path-var=<var>=<path> option to configure MLB path variables.
Each line of path map file consists of two space-separated tokens: variable name and path.