anchor.diff:      type(Expr);
   ensure_type(Expr, Type) ->
       TypedExpr = type(Expr),
  +    
       Type = extract_type(TypedExpr),
       TypedExpr.
   
  
positive.code: 
  -type env_ref() :: reference() | global.
  -record(lambda, {
  	  ref                   :: env_ref(), % unique reference for symbol table
        label                 :: string(),    % name in llvm code
        type                  :: #typeFun{},
        definitions           :: #nameDef{},  % names introduced by this functions
  
negative.code: 
      % FIXME: i am evil fixed typed code
      #closure{ lambda=Lambda }  = Closure,
      #lambda{ label = Label,
          definitions= [ NameDef = #nameDef{ name=SelfReference } | _Other ] } = Lambda,
      Type = #typeCl{
             lambda = #typeFun{ return=int, arguments=[int]},
              name   = "clojure_fix_"++Label,
              captures=[] %#typeFun{ return=int, arguments=[int]}
          },
      compil_table:setType(SelfReference, Type),
      TypedClosure = type(Closure),
      #fix{ closure=TypedClosure, cltype=Type, type=#typeFun{return=int, arguments=[int]}};
  
  %% typing for cond:
  %%  * ensure that cond is boolean
  