     if not ctx.isCurrentlyDeclared name
       ctx.declare name, id: id
     if deps.length > 0
-      # log "adding top level lhs to deferred #{name}", deps
       currentType = substitute ctx.substitution, type
       ctx.addToDeferred
         name: name

      id = (ctx.definitionName() and ctx.definitionId()) ?
        (ctx.currentDeclarationId symbol) ? ctx.freshId()
      type = toConstrained ctx.freshTypeVariable star
      # ctx.bindTypeVariables [type.type.name]
      ctx.addToDefinedNames {name: symbol, id: id, type: type}
      type: type
      id: id

    (map f lines))

  f (fn [x]
    x)

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

