anchor.diff:      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),
  
positive.code: decode('or') -> "or";
  decode('and') -> "and";
  decode('=') -> "icmp eq";
  decode('<') -> "icmp sgt";
  decode('=') -> "icmp slt".
  
  % Types
  decode_type(#typeFun{return=Return,arguments=Args}) ->
  
negative.code: -define(NUM_OPS,['+','-','*','/']).
  
  -define(PRIMOPS,?BOOL_OPS ++ ?CMP_OPS ++ ?NUM_OPS).
  -define(BUILDINS,?PRIMOPS ++ ['cond', fix]).
  
  -record(literal,{
            type :: systemType(),
  