anchor.diff:             | Some (branch, [arg]) ->
                translate env (arg::bs) branch
              | None -> //no branch is determined
  -             mkAccuMatch scrut case
  +             mkAccuMatch scrut case branches
              | Some (_, hd::tl) -> failwith "Impossible: Matching on constants cannot bind more than one variable")
   
           | _ ->
  -          mkAccuMatch scrut case
  +          mkAccuMatch scrut case branches
         in
         case (translate env bs scrut)
   
  
positive.code:           | Some (branch, args) ->
              translate env (List.fold_left (fun bs x -> x::bs) bs args) branch
            | None -> //no branch is determined
              mkAccuMatch scrut case
            end
          | Constant c ->
            (* same as for construted values, but args are either empty or is a singleton list (for wildcard patterns) *)
  
negative.code: let mkConstruct i us ts = Construct(i, us, ts)
  
  let mkAccuVar (v:var) = Accu(Var v, [])
  let mkAccuMatch (s : t) (c : t -> t) (bs:list<branch>) = Accu(Match (s, c, bs), [])
  let mkAccuRec (b:letbinding) (bs:list<letbinding>) (env:list<t>) = Accu(Rec(b, bs, env), [])
  
  let isAccu (trm:t) =
  