anchor.diff:  decode('or') -> "or";
   decode('and') -> "and";
   decode('=') -> "icmp eq";
  -decode('<') -> "icmp sgt";
  -decode('=') -> "icmp slt".
  +decode('<') -> "icmp slt";
  +decode('>') -> "icmp sgt".
   
   % Types
   decode_type(#typeFun{return=Return,arguments=Args}) ->
  
positive.code: 
      LoadCode = ?LIN([MyVar,"=","load","i32*",Pointer]),
  
      {MyVar, lists:reverse(CondCodes ++ [AllocCode, BranchCode] ++
              [LabelTrueCode | TrueCodes] ++
              [ StoreTrueCode | [ContinueCode | [LabelFalseCode | FalseCodes]]] ++
              [StoreFalseCode, ContinueCode,  LabelContinueCode, LoadCode ])};
  
  
  
negative.code:     MyType = #typeFun{return=extract_type(TypedChild), arguments=ArgTypes},
      Lambda#lambda{definitions=TypedDefinitions, child=TypedChild, type=MyType};
  
  % Test: typing of the fix point
  type(#call{ target=Target=#name{name=fix }, arguments=[Closure]} = Expr) ->
  
      #closure{ lambda=Lambda }  = Closure,
      #lambda{ definitions= [ NameDef = #nameDef{ name=SelfReference } | _Other ] } = Lambda,
      Type = #typeCl{
             lambda = #typeFun{ return=int, arguments=[int]},
              name   = "clojure_fix",
              captures=[] %#typeFun{ return=int, arguments=[int]}
          },
      %Type = #typeFun{return=int, arguments=[int]},
      emit_closure_struct(Type),
      compil_table:setType(SelfReference, Type),
      TypedClosure = type(Closure),
      #fix{ closure=TypedClosure, type=#typeFun{return=int, arguments=[int]}};
  
  
  type(#call{ target=Target=#name{name='cond' }, arguments=[Cond, Left, Right]} = Expr) ->
      TypedCond = ensure_type(Cond,bool),
      TypedLeft = type(Left),
  