anchor.diff:                let f = mkFunction memb.LogicalName (List.length ps)
                 Some (f, funDef f l)
         | Entity(ent, declList) when ent.IsFSharpRecord ->
  -          (* printfn "cannot process record %+A" (ent.FSharpFields |> Seq.toList) *)
             None
         |  MemberOrFunctionOrValue(x, _, _) ->
             (* printfn "cannot process %A" x.LogicalName *)
  
positive.code:                             let e =
                                  cerl.Let ((vls, cerl.Exps (cerl.Constr es)), e)
                              // we can throw away nm now as have branched
  
                              // TODO if e is a let it should be in pattern
                              altExpr (cerl.Pat pat, grd, e |> constr))
                  cerl.Case (caseExpr, alts), nm
              | B.FSharpFieldGet (Some e, t, fld) ->
  
negative.code:                         cerl.Case (caseExpr, alts), nm
                  | x -> failwithf "unexpected if then else result %A" x
  
              | B.DecisionTree (B.IfThenElse (fi, _, _) as ite, branches) as tree ->
                  (* printfn "ite %A \r\nl %A" ite  l *)
                  // TODO: it wont always be vars
                  let caseExpr, nm = extractCaseExpr nm fi
  