anchor.diff:  extract_type(#name{type = Type}) -> Type;
   extract_type(#literal{type = Type}) -> Type;
   extract_type(#lambda{type = Type}) -> Type;
  -extract_type(#closure{ lambda=#lambda{type = Type}}) -> Type.
  +extract_type(#closure{ type= Type}) -> Type.
   
   
   
  
positive.code:     {"@" ++ Label,""};
  
  codegen(#call{ type=RetType, target = Target,  arguments = Args }) ->
      CodeArgs = lists:map(fun(Arg) ->  codegen(Arg) end, Args),
      {Vars, ArgCodes}  = lists:unzip(CodeArgs),
      ArgCodeLines =  lists:concat(ArgCodes),
  
negative.code: 
  type(#call{ target=Target, arguments=Arguments} = Call ) ->
      TypedTarget = type(Target),
      case extract_type(TypedTarget) of
          #typeFun{ return=ReturnType, arguments=ExpectedArgTypes} ->
              TypedArguments = type_check_args(Arguments, ExpectedArgTypes);
          #typeCl{ captures=CaptureTypes, lambda = #typeFun{ return=ReturnType, arguments=ExpectedArgTypes} } ->
              TypedArguments = type_check_args(Arguments, lists:subtract(ExpectedArgTypes, CaptureTypes))
      end,
      Call#call{ target = TypedTarget, arguments=TypedArguments, type=ReturnType};
  
  type(#name{name=Name, buildin=true} = Expr) ->
      Expr#name{type=buildin_type(Name)};
  type(#name{name=Name} = Expr) ->
  