           [elem, "$sequenceSplat(#{i}, #{elems.length - i - 1}, #{exp})"]
         else
           [elem, "$sequenceAt(#{i}, #{exp})"])
+  # Tuples
   (pattern) ->
     elems = inside pattern
     trigger: isTuple pattern

  recurse: '#67B3DD'
  param: '#FDA947'
  comment: 'grey'
  operator: '#cceeff'
  normal: 'white'

colorize = (color, string) ->

  #       [head, "#{exp}.head"]
  #       [tail, "#{exp}.tail"]
  #     ]

  # Maps
  (pattern) ->
    # expect lists from here on
    if not Array.isArray pattern
      throw new Error "pattern match expected pattern but saw token #{pattern.token}"
    [constr, elems...] = inside pattern
    label = "'#{constructorToJsField constr}'" if constr
    trigger: isMap pattern
    cache: true
    cacheMore: (exp) -> if elems.length > 1 then ["#{exp}[#{label}]"] else []
