anchor.diff:    let (inputs, body) = match e with TopLevelFunction (i, b) -> (i, b)
     let (te, ll) = constructTopLevelAllocs inputs body
     LambdaN(inputs, AllocNWithVar(ll, te))
  +
  +let isNormalForm (e: Expr): bool = 
  +  match e with
  +  | Patterns.Value(_, _) -> true
  +  | Patterns.Var(_)      -> true
  +  | _                    -> false
   
   let rec transformStoraged (exp: Expr) (outputStorage: StorageOutput) (env: Map<Var, Var * Var>): Expr =
     let S e s = transformStoraged e s env
  
positive.code:       else
          CT (ta.MakeArrayType())
      MakeCall <@ corelang.fold_s @> [s1; sf; sz; sr; cf; cz; cr] [ta; tb; tac; tanc; tbc]
    | ArrayLength(e0) ->
      Alloc (WidthCard e0 cardEnv) (fun s ->
        ArrayLength(S e0 s)
  
negative.code:     let s1 = Expr.Var(outputStorage)
      let tc = CT t
      MakeCall <@ corelang.build_s @> [s1; se0; se1; ce0; ce1] [t; tc] 
    | DerivedPatterns.SpecificCall <@ corelang.fold @> (_, [ta; tb], [f; z; r]) when isNormalForm z && isNormalForm r ->
      let sf = S f O
      let sz = S z O
      let sr = S r O
  