---input---
a = -> [1 to 50]
const b = --> [2 til 5]
var c = ~~> 10_000_000km * 500ms - 16~ff / 32~lol
e = (a) -> (b) ~> (c) --> (d, e) ~~> <[list of words]>
dashes-identifiers = ->
  a - a b -- c 1-1 1- -1 a- a a -a
underscores_i$d = ->
  /regexp1/
  //regexp2//g
  'strings' and "strings" and \strings and \#$-"\'strings

another-word-list = <[ more words ]>

[2 til 10]
  |> map (* 2)
  |> filter (> 5)
  |> fold (+)

obj =
  prop1: 1
  prop2: 2

class Class extends Anc-est-or
  (args) ->
    <- # Comment
    <~ /* Comment */
    void undefined yes no on off
    a.void b.undefined c.off d.if f.no g.not
    avoid bundefined coff dif fno gnot
    "inter #{2 + 2} #variable"
    '''HELLO 'world' '''

copy = (from, to, callback) -->
  error, data <- read file
  return callback error if error?
  error <~ write file, data
  return callback error if error?
  callback()

take(n, [x, ...xs]:list) =
  | n <= 0     => []
  | empty list => []
  | otherwise  => [x] +++ take n - 1, xs

---tokens---
'a = '        Name.Variable
'->'          Name.Function
' '           Text
'['           Punctuation
'1'           Literal.Number.Integer
' '           Text
'to'          Keyword
' '           Text
'50'          Literal.Number.Integer
']'           Punctuation
'\n'          Text

'const'       Keyword
' '           Text
'b = '        Name.Variable
'-->'         Name.Function
' '           Text
'['           Punctuation
'2'           Literal.Number.Integer
' '           Text
'til'         Keyword
' '           Text
'5'           Literal.Number.Integer
']'           Punctuation
'\n'          Text

'var'         Keyword
' '           Text
'c = '        Name.Variable
'~~>'         Name.Function
' '           Text
'10_'         Literal.Number.Integer
'000_'        Literal.Number.Integer
'000km'       Literal.Number.Integer
' '           Text
'*'           Operator
' '           Text
'500ms'       Literal.Number.Integer
' '           Text
'-'           Operator
' '           Text
'16~ff'       Literal.Number.Integer
' '           Text
'/'           Operator
' '           Text
'32~lol'      Literal.Number.Integer
'\n'          Text

'e = '        Name.Variable
'(a) ->'      Name.Function
' '           Text
'(b) ~>'      Name.Function
' '           Text
'(c) -->'     Name.Function
' '           Text
'(d, e) ~~>'  Name.Function
' '           Text
'<[list of words]>' Literal.String
'\n'          Text

'dashes-identifiers = ' Name.Variable
'->'          Name.Function
'\n  '        Text
'a'           Name.Other
' '           Text
'-'           Operator
' '           Text
'a'           Name.Other
' '           Text
'b'           Name.Other
' '           Text
'-'           Operator
'-'           Operator
' '           Text
'c'           Name.Other
' '           Text
'1'           Literal.Number.Integer
'-'           Operator
'1'           Literal.Number.Integer
' '           Text
'1'           Literal.Number.Integer
'-'           Operator
' '           Text
'-'           Operator
'1'           Literal.Number.Integer
' '           Text
'a-'          Name.Other
' '           Text
'a'           Name.Other
' '           Text
'a'           Name.Other
' '           Text
'-'           Operator
'a'           Name.Other
'\n'          Text

'underscores_i$d = ' Name.Variable
'->'          Name.Function
'\n  '        Text
'/'           Operator
'regexp1'     Name.Other
'/'           Operator
'\n  '        Text
'/'           Operator
'/regexp2/'   Literal.String.Regex
'/'           Operator
'g'           Name.Other
'\n  '        Text
"'"           Literal.String
'strings'     Literal.String
"'"           Literal.String
' '           Text
'and'         Operator
' '           Text
'"'           Literal.String
'strings'     Literal.String
'"'           Literal.String
' '           Text
'and'         Operator
' '           Text
'\\strings'   Literal.String
' '           Text
'and'         Operator
' '           Text
'\\#$-"\\\'strings' Literal.String
'\n\n'        Text

'another-word-list = ' Name.Variable
'<[ more words ]>' Literal.String
'\n\n'        Text

'['           Punctuation
'2'           Literal.Number.Integer
' '           Text
'til'         Keyword
' '           Text
'10'          Literal.Number.Integer
']'           Punctuation
'\n  '        Text
'|'           Operator
'>'           Operator
' '           Text
'map'         Name.Other
' '           Text
'('           Punctuation
'*'           Operator
' '           Text
'2'           Literal.Number.Integer
')'           Punctuation
'\n  '        Text
'|'           Operator
'>'           Operator
' '           Text
'filter'      Name.Other
' '           Text
'('           Punctuation
'>'           Operator
' '           Text
'5'           Literal.Number.Integer
')'           Punctuation
'\n  '        Text
'|'           Operator
'>'           Operator
' '           Text
'fold'        Name.Other
' '           Text
'('           Punctuation
'+'           Operator
')'           Punctuation
'\n\n'        Text

'obj =\n'     Name.Variable

'  '          Text
'prop1: '     Name.Variable
'1'           Literal.Number.Integer
'\n  '        Text
'prop2: '     Name.Variable
'2'           Literal.Number.Integer
'\n\n'        Text

'class'       Keyword
' '           Text
'Class'       Name.Other
' '           Text
'extends'     Keyword
' '           Text
'Anc-est-or'  Name.Other
'\n  '        Text
'(args) ->'   Name.Function
'\n    '      Text
'<-'          Name.Function
' '           Text
'# Comment\n' Comment.Single

'    '        Text
'<~'          Name.Function
' '           Text
'/* Comment */' Comment.Multiline
'\n    '      Text
'void'        Keyword.Constant
' '           Text
'undefined'   Keyword.Constant
' '           Text
'yes'         Keyword.Constant
' '           Text
'no'          Keyword.Constant
' '           Text
'on'          Keyword.Constant
' '           Text
'off'         Keyword.Constant
'\n    '      Text
'a'           Name.Other
'.'           Punctuation
'void'        Name.Other
' '           Text
'b'           Name.Other
'.'           Punctuation
'undefined'   Name.Other
' '           Text
'c'           Name.Other
'.'           Punctuation
'off'         Name.Other
' '           Text
'd'           Name.Other
'.'           Punctuation
'if'          Name.Other
' '           Text
'f'           Name.Other
'.'           Punctuation
'no'          Name.Other
' '           Text
'g'           Name.Other
'.'           Punctuation
'not'         Name.Other
'\n    '      Text
'avoid'       Name.Other
' '           Text
'bundefined'  Name.Other
' '           Text
'coff'        Name.Other
' '           Text
'dif'         Name.Other
' '           Text
'fno'         Name.Other
' '           Text
'gnot'        Name.Other
'\n    '      Text
'"'           Literal.String
'inter '      Literal.String
'#{'          Literal.String.Interpol
'2'           Literal.Number.Integer
' '           Text
'+'           Operator
' '           Text
'2'           Literal.Number.Integer
'}'           Literal.String.Interpol
' '           Literal.String
'#'           Literal.String
'variable'    Literal.String
'"'           Literal.String
'\n    '      Text
"'''"         Literal.String
'HELLO '      Literal.String
"'"           Literal.String
'world'       Literal.String
"'"           Literal.String
' '           Literal.String
"'''"         Literal.String
'\n\n'        Text

'copy = '     Name.Variable
'(from, to, callback) -->' Name.Function
'\n  '        Text
'error, data <-' Name.Function
' '           Text
'read'        Name.Other
' '           Text
'file'        Name.Other
'\n  '        Text
'return'      Keyword
' '           Text
'callback'    Name.Other
' '           Text
'error'       Name.Other
' '           Text
'if'          Keyword
' '           Text
'error'       Name.Other
'?'           Operator
'\n  '        Text
'error <~'    Name.Function
' '           Text
'write'       Name.Other
' '           Text
'file'        Name.Other
','           Punctuation
' '           Text
'data'        Name.Other
'\n  '        Text
'return'      Keyword
' '           Text
'callback'    Name.Other
' '           Text
'error'       Name.Other
' '           Text
'if'          Keyword
' '           Text
'error'       Name.Other
'?'           Operator
'\n  '        Text
'callback'    Name.Other
'('           Punctuation
')'           Punctuation
'\n\n'        Text

'take'        Name.Other
'('           Punctuation
'n'           Name.Other
','           Punctuation
' '           Text
'['           Punctuation
'x'           Name.Other
','           Punctuation
' '           Text
'.'           Punctuation
'.'           Punctuation
'.'           Punctuation
'xs'          Name.Other
']'           Punctuation
':'           Operator
'list'        Name.Other
')'           Punctuation
' '           Text
'='           Operator
'\n  '        Text
'|'           Operator
' '           Text
'n'           Name.Other
' '           Text
'<='          Operator
' '           Text
'0'           Literal.Number.Integer
'     '       Text
'='           Operator
'>'           Operator
' '           Text
'['           Punctuation
']'           Punctuation
'\n  '        Text
'|'           Operator
' '           Text
'empty'       Name.Other
' '           Text
'list'        Name.Other
' '           Text
'='           Operator
'>'           Operator
' '           Text
'['           Punctuation
']'           Punctuation
'\n  '        Text
'|'           Operator
' '           Text
'otherwise'   Name.Other
'  '          Text
'='           Operator
'>'           Operator
' '           Text
'['           Punctuation
'x'           Name.Other
']'           Punctuation
' '           Text
'++'          Operator
'+'           Operator
' '           Text
'take'        Name.Other
' '           Text
'n'           Name.Other
' '           Text
'-'           Operator
' '           Text
'1'           Literal.Number.Integer
','           Punctuation
' '           Text
'xs'          Name.Other
'\n'          Text
