--- 
name: Standard ML
fileTypes: 
- sml
- sig
scopeName: source.ml
repository: 
  spec: 
    patterns: 
    - name: meta.spec.ml.type
      captures: 
        "1": 
          name: keyword.other.ml
      match: \b(type)\b
    - name: meta.spec.ml.datatype
      captures: 
        "1": 
          name: keyword.other.ml
      match: \b(datatype)\b
    - name: meta.spec.ml.val
      captures: 
        "1": 
          name: keyword.other.ml
      match: "\\b(val)\\s*\\w+:"
    - name: meta.spec.ml.structure
      captures: 
        "1": 
          name: keyword.other.ml
      match: "\\b(structure)\\s*\\w+:"
    - name: meta.spec.ml.include
      captures: 
        "1": 
          name: keyword.other.ml
      match: \b(include)\b
uuid: 9B148AEA-F723-4EDE-8B7F-2F4FD730BC3A
foldingStartMarker: \(\*|\b(struct|sig)\b
patterns: 
- name: comment.block.ml
  captures: 
    "0": 
      name: punctuation.definition.comment.ml
  begin: \(\*
  end: \*\)
- name: keyword.other.ml
  match: \b(val|datatype|struct|as|let|in|abstype|local|where|case|of|fn|raise|exception|handle|ref|infix)\b
- name: meta.module.sigdec.ml
  captures: 
    "1": 
      name: keyword.other.delimiter.ml
    "2": 
      name: keyword.other.delimiter.ml
  begin: \b(sig)\b
  end: \b(end)\b
  patterns: 
  - include: "#spec"
- name: keyword.control.ml
  match: \b(if|then|else)\b
- name: meta.definition.fun.ml
  captures: 
    "1": 
      name: keyword.control.fun.ml
    "2": 
      name: entity.name.function.ml
  match: \b(fun|and)\s+([\w']+)\b
- name: string.quoted.double.ml
  endCaptures: 
    "0": 
      name: punctuation.definition.string.end.ml
  begin: "\""
  beginCaptures: 
    "0": 
      name: punctuation.definition.string.begin.ml
  end: "\""
  patterns: 
  - name: constant.character.escape.ml
    match: \\.
- name: constant.character.ml
  captures: 
    "1": 
      name: punctuation.definition.constant.ml
    "3": 
      name: punctuation.definition.constant.ml
  match: (#")(\\)?.(")
- name: constant.numeric.ml
  match: \b\d*\.?\d+\b
- name: keyword.operator.logical.ml
  match: \b(andalso|orelse|not)\b
- name: meta.module.dec.ml
  captures: 
    "1": 
      name: storage.type.module.binder.ml
    "2": 
      name: entity.name.type.module.ml
  begin: |-
    (?x)\b
    					(functor|structure|signature|funsig)\s+
    					(\w+)\s* # identifier
  end: (?==|:)
- name: keyword.other.module.ml
  match: \b(open)\b
- name: constant.language.ml
  match: \b(nil|true|false|NONE|SOME)\b
- name: meta.typeabbrev.ml
  captures: 
    "1": 
      name: keyword.other.typeabbrev.ml
    "2": 
      name: variable.other.typename.ml
  begin: ^\s*(type|eqtype) .* =
  end: $
  patterns: 
  - name: meta.typeexp.ml
    match: (([a-zA-Z0-9\.\* ]|(\->))*)
- name: meta.type.ascription.ml
  captures: 
    "2": 
      name: constant.other.type.ml
  match: "[^:](:)\\s*(([a-zA-Z0-9\\.\\*\\_ ]|(\\->))*)"
  comment: type annotation/ascription
foldingStopMarker: \*\)|\bend\b
keyEquivalent: ^~S
