 
 nameTranslate = (ctx, atom, symbol, type) ->
   id = ctx.declarationId symbol
-  arity = ctx.arity symbol
   ctx.addToUsedNames symbol
   translation =
     if atom.label is 'const'

        else
          (jsAccess (validIdentifier symbol), "_value")
    else
      (irReference symbol, id, type, arity)
  {id, type, translation}

namespacedNameCompile = (ctx, atom, symbol) ->

  """
  '(h 3)', 2

  'overloaded reference'
  """
  Mappable (class [wrapper]
    map (fn [what onto]
      (: (Fn (Fn a b) (wrapper a) (wrapper b)))))

  array-mappable (instance (Mappable Array)
    map (macro [what over]
      (: (Fn (Fn a b) (Array a) (Array b)))
      (Js.method over "map" {what})))

  g (fn [lines]
    (map f lines))

  f (fn [x]
    x)

  expand (fn [x]
    gg
    gg (g {""}))
  """
  '3', 3



  # TODO: support matching with the same name
  #       to implement this we need the iife to take as arguments all variables
