module LambdaCalculus::Application1

def eval(env={})

def eval(env={})
  left_associative_apply(operator.eval(env), env)
end

def left_associative_apply(operator, env)

def left_associative_apply(operator, env)
  if expression.instance_of?(Application)
    expression.left_associative_apply(operator.apply(expression.operator.eval(env)), env)
  else
    operator.apply(expression.eval(env))
  end
end

def to_s(env={})

def to_s(env={})
  operator.to_s(env) + ' ' + expression.to_s(env)
end