anchor.diff:              | s when s.StartsWith "System.Linq.Enumerable+<RangeIterator>"  ->
                   let start = ty.GetFields().First(fun f -> f.Name.EndsWith "__start").GetValue(enumerable)
                   let count = ty.GetFields().First(fun f -> f.Name.EndsWith "__count").GetValue(enumerable)
  -                new QueryExpr<IEnumerable<'T>>(RangeGenerator(start :?> int, count :?> int))
  +                new QueryExpr<_>(RangeGenerator(start :?> int, count :?> int))
               | s when s.StartsWith "System.Linq.Enumerable+<RepeatIterator>"  ->
                   let element = ty.GetFields().First(fun f -> f.Name.EndsWith "__element").GetValue(enumerable)
                   let count = ty.GetFields().First(fun f -> f.Name.EndsWith "__count").GetValue(enumerable)
  -                new QueryExpr<IEnumerable<'T>>(RepeatGenerator(element, typeof<'T>, count :?> int))
  -            | _ -> new QueryExpr<IEnumerable<'T>>(Source (constant enumerable, typeof<'T>))
  +                new QueryExpr<_>(RepeatGenerator(element, typeof<'T>, count :?> int))
  +            | _ -> new QueryExpr<_>(Source (constant enumerable, typeof<'T>))
   
           [<System.Runtime.CompilerServices.Extension>]
           static member Compile<'T>(queryExpr : QueryExpr<'T>) : Func<'T> =
  
positive.code:         // SequentialQuery ExtensionMethods
  
          [<System.Runtime.CompilerServices.Extension>]
          static member AsQueryExpr(enumerable : IEnumerable<'T>) = 
              // Hack to optimize Enumerable.Range and Enumerable.Repeat calls
              // TODO : check Mono generated types
              let ty = enumerable.GetType()
  
negative.code:         [<System.Runtime.CompilerServices.Extension>]
          static member GroupBy<'T, 'Key>(queryExpr : QueryExpr<IEnumerable<'T>>, keySelector : Expression<Func<'T, 'Key>>)
                                  : QueryExpr<IEnumerable<IGrouping<'Key, 'T>>> = 
              new QueryExpr<_>(GroupBy (keySelector, queryExpr.QueryExpr, typeof<IGrouping<'Key, 'T>>))
  
          [<System.Runtime.CompilerServices.Extension>]
          static member OrderBy<'T, 'Key>(queryExpr : QueryExpr<IEnumerable<'T>>, keySelector : Expression<Func<'T, 'Key>>)
                                  : QueryExpr<IEnumerable<'T>> = 
              new QueryExpr<_>(OrderBy (keySelector, Order.Ascending, queryExpr.QueryExpr, typeof<'T>))
  
          [<System.Runtime.CompilerServices.Extension>]
          static member OrderByDescending<'T, 'Key>(queryExpr : QueryExpr<IEnumerable<'T>>, keySelector : Expression<Func<'T, 'Key>>)
                                  : QueryExpr<IEnumerable<'T>> = 
              new QueryExpr<_>(OrderBy (keySelector, Order.Descending, queryExpr.QueryExpr, typeof<'T>))
  
          [<System.Runtime.CompilerServices.Extension>]
          static member ToList(queryExpr : QueryExpr<IEnumerable<'T>>) : QueryExpr<List<'T>> = 
              new QueryExpr<_>(ToList queryExpr.QueryExpr)
  
          [<System.Runtime.CompilerServices.Extension>]
          static member ToArray(queryExpr : QueryExpr<IEnumerable<'T>>) : QueryExpr<'T []> = 
              new QueryExpr<_>(ToArray queryExpr.QueryExpr)
  
          // ParallelQuery ExtensionMethods
          [<System.Runtime.CompilerServices.Extension>]
          static member AsQueryExpr(parallelQuery : ParallelQuery<'T>) : ParallelQueryExpr<IEnumerable<'T>> = 
              new ParallelQueryExpr<_>(Source (constant parallelQuery, typeof<'T>))
  
          [<System.Runtime.CompilerServices.Extension>]
          static member Compile<'T>(queryExpr : ParallelQueryExpr<'T>) : Func<'T> =
  