anchor.diff:                                              | p ->
                                                   let rec collect parts =
                                                       match parts with
  -                                                    | [ TextHole h ] -> getVar h
  +                                                    | [ TextHole h ] -> getViewHole h
                                                       | [ TextHole h; TextPart t ] -> 
  -                                                        <@ View.Map (fun s -> s + t) %(getVar h) @>
  +                                                        <@ View.Map (fun s -> s + t) %(getViewHole h) @>
                                                       | [ TextPart t; TextHole h ] -> 
  -                                                        <@ View.Map (fun s -> t + s) %(getVar h) @>
  +                                                        <@ View.Map (fun s -> t + s) %(getViewHole h) @>
                                                       | [ TextPart t1; TextHole h; TextPart t2 ] ->
  -                                                        <@ View.Map (fun s -> t1 + s + t2) %(getVar h) @>
  +                                                        <@ View.Map (fun s -> t1 + s + t2) %(getViewHole h) @>
                                                       | TextHole h :: rest ->
  -                                                        <@ View.Map2 (fun s1 s2 -> s1 + s2) %(getVar h) %(collect rest) @>
  +                                                        <@ View.Map2 (fun s1 s2 -> s1 + s2) %(getViewHole h) %(collect rest) @>
                                                       | TextPart t :: TextHole h :: rest ->
  -                                                        <@ View.Map2 (fun s1 s2 -> t + s1 + s2) %(getVar h) %(collect rest) @>
  +                                                        <@ View.Map2 (fun s1 s2 -> t + s1 + s2) %(getViewHole h) %(collect rest) @>
                                                       | _ -> failwithf "collecting attribute parts failure" // should not happen
                                                   <@ Attr.Dynamic n %(collect p) @>
                                       )
  
positive.code:     let ExprArray (exprs: Expr<'T> seq) : Expr<'T[]> =
          Expr.NewArray(typeof<'T>, exprs |> Seq.cast |> List.ofSeq) |> Expr.Cast
  
  type StringParts =
      | TextPart of string
      | TextHole of string
  
  [<TypeProvider>]
  type TemplateProvider(cfg: TypeProviderConfig) as this =
  
negative.code:                                         let n = a.Name.LocalName
                                          if n.StartsWith dataEvent then
                                              let eventName = n.[dataEvent.Length..]
                                              <@ Attr.Handler eventName %(getSimpleHole a.Value) @>
                                          else
                                              match getParts a.Value with
                                              | [] -> <@ Attr.Create n "" @>
  