anchor.diff:          s.Accept {
               new IFSharpListVisitor<Parser<'T>> with
                   member __.Visit<'t> () =
  -                    let tp = mkFParser<'t>()
  +                    let tp = genParser<'t>()
                       let sep = token ";"
                       let lp = between (token "[") (token "]") (sepBy tp sep)
                       wrap lp
  
positive.code:         s.Accept {
              new IArrayVisitor<Parser<'T>> with
                  member __.Visit<'t> _ =
                      let tp = mkFParser<'t> ()
                      let sep = token ";"
                      let lp = between (token "[|") (token "|]") (sepBy tp sep)
                      wrap(lp |>> Array.ofList)
  
negative.code:     | _ -> failwithf "unsupported type '%O'" typeof<'T>
  
  
  /// Generates a string parser for given type
  let mkParser<'T> () : string -> 'T = 
      let fp = genParser<'T>() in 
      fun inp -> 
          match run fp inp with
          | Success(r,_,_) -> r
          | Failure(msg,_,_) -> failwithf "Parse error: %s" msg
  
  // examples
  
  let p1 = mkParser<int * int list>()
  