preproc = '\<(?:external|open|include|[A-Z][\w\']*(?=\.))\>'

include "number.lang"

string delim "\"" "\"" escape "\\"

keyword = "and|as|assert|asr|begin|class|closed|constraint|do|done|downto|else|end|exception|false|for|fun|function|functor|if|in|inherit|initializer|land|lazy|let|lor|lsl|lsr|lxor|match|method|mod|module|mutable|new|object|of|or|parser|private|rec|sig|struct|then|to|true|try|type|val|virtual|when|while|with"

comment delim "(*" "*)" multiline nested 

type = '\<(?:[A-Z][\w\']*(?!\.)|int|int32|int64|nativeint|bool|char|exn|option|float|unit|string|list|array|ref|format|format4|lazy_t|in_channel|out_channel)\>'

include "symbols.lang"

cbracket = "{|}"

