 
 star = '*'
 arrowType = new TypeConstr 'Fn', kindFn 2
+arrayType = new TypeConstr 'Array', kindFn 1
 listType = new TypeConstr 'List', kindFn 1
 hashmapType = new TypeConstr 'Map', kindFn 2
 hashsetType = new TypeConstr 'Set', kindFn 1

        (: (Fn ce e))))

    list-first (macro [in]
      (: (Fn (List item) item))
      (Js.call (Js.access in "first") {}))

    list-collection (instance (Collection (List a) a)
      first (fn [in]
        (list-first in)))
  """

    # expressionCompile ctx, arrayToConses elems
    # result =>         "[#{listOf map _compiled, elems}]"

    compiledItems = uniformCollectionCompile ctx, form, elems, arrayType
    assignCompile ctx, form, (irArray compiledItems)

isSplat = (expression) ->
  (isAtom expression) and (_symbol expression)[...2] is '..'
