anchor.diff:             (_) -> b
           end(#r1{a = 1}),
   
  +    a = rec_call(fun(A) when not (A#r.a =:= 1) or false -> a end, #r{a = 42}),
  +
       ok = fun() ->
                    F = fun(A) when not (A#r.a =:= 1) -> yes;
                           (_) -> no
  
positive.code: -record(r3, {a = fun(_) -> #r1{} end(1), b}).
  
  t() ->
      foo = fun(A) when A#r1.a > A#r1.b -> foo end(#r1{b = 2}),
      0 = fun(A) when A#r2.a -> 0 end(#r2{a = true}),
      1 = fun(A) when (#r1{a = A})#r1.a > 2 -> 1 end(3),
      2 = fun(N) when ((#r2{a = #r{a = 4}, b = length([a,b,c])})#r2.a)#r.a > N ->
                  2 end(2),
      3 = fun(A) when (A#r2.a)#r1.a =:= 3 -> 3 end(#r2{a = #r1{a = 3}}),
      ok = fun() ->
                   F = fun(A) when record(A#r.a, r1) -> 4;
                          (A) when record(A#r1.a, r1) -> 5
  
negative.code:            (_) -> p
          end(#r1{a = 2}),
  
      o = rec_call(fun(A) when (A#r1.a =:= 2) orelse (A#r2.a =:= 1) -> o end, #r1{a = 2}),
      o = rec_call(fun(A) when A#r1.a =:= 2; A#r2.a =:= 1 -> o end, #r2{a = 1}),
  
      3 = rec_call(fun(A) when A#r1.a > 3, record(A, r1) -> 3 end, #r1{a = 5}),
  
      ok = fun() ->
                   F = fun(A) when (A#r2.a =:= 1) orelse (A#r2.a) -> 2;
  