anchor.diff:  
           static member Compile<'T>(queryExpr : QueryExpr, optimize : Func<Expression,Expression>, allowNonPublicMemberAccess : bool) : Func<'T> =
               if allowNonPublicMemberAccess then
  -                let d = CoreHelpers.Compile(queryExpr, fun expr -> Compiler.compileToSequential expr optimize.Invoke)
  -                Func<'T>(fun () -> d.DynamicInvoke() :?> _)
  +                CoreHelpers.Compile(queryExpr, fun expr -> Compiler.compileToSequential expr optimize.Invoke)
               else
  -                let mi, objs = CoreHelpers.CompileToMethod(queryExpr, fun expr -> Compiler.compileToSequential expr optimize.Invoke )
  -                Func<'T>(CoreHelpers.WrapInvocation(mi, objs))
  +                CoreHelpers.CompileToMethod(queryExpr, fun expr -> Compiler.compileToSequential expr optimize.Invoke )
  +                
   
           static member Compile(queryExpr : QueryExpr, optimize : Func<Expression,Expression>,  allowNonPublicMemberAccess : bool) : Action =
               if allowNonPublicMemberAccess then
  -                let d = CoreHelpers.Compile(queryExpr, fun expr -> Compiler.compileToSequential expr optimize.Invoke)
  -                Action(fun () -> d.DynamicInvoke() :?> _)
  +                let func = CoreHelpers.Compile(queryExpr, fun expr -> Compiler.compileToSequential expr optimize.Invoke)
  +                Action(fun () -> func.Invoke())
               else
  -                let mi, objs = CoreHelpers.CompileToMethod(queryExpr, fun expr -> Compiler.compileToSequential expr optimize.Invoke )
  -                Action(CoreHelpers.WrapInvocation(mi, objs))
  +                let func = CoreHelpers.CompileToMethod(queryExpr, fun expr -> Compiler.compileToSequential expr optimize.Invoke )
  +                Action(fun () -> func.Invoke())
   
           static member CompileToParallel<'T>(queryExpr : QueryExpr,  optimize : Func<Expression,Expression>, allowNonPublicMemberAccess : bool ) : Func<'T> =
               if allowNonPublicMemberAccess then
  -                let d = CoreHelpers.Compile(queryExpr, fun expr -> Compiler.compileToParallel expr optimize.Invoke)
  -                Func<'T>(fun () -> d.DynamicInvoke() :?> _)
  +                CoreHelpers.Compile(queryExpr, fun expr -> Compiler.compileToParallel expr optimize.Invoke)
               else
  -                let mi, objs = CoreHelpers.CompileToMethod(queryExpr,  fun expr -> Compiler.compileToParallel expr optimize.Invoke )
  -                Func<'T>(CoreHelpers.WrapInvocation(mi, objs))
  +                CoreHelpers.CompileToMethod(queryExpr,  fun expr -> Compiler.compileToParallel expr optimize.Invoke )
  +                
   
   
  
positive.code:     open System.Reflection
      open System.Reflection.Emit
  
  
      type CoreHelpers =
          static member AsQueryExpr(enumerable : IEnumerable, ty : Type) : QueryExpr = 
              // Hack to optimize Enumerable.Range and Enumerable.Repeat calls
              // TODO : check Mono generated types
  
negative.code:             | _ -> 
                  Source (constant enumerable, ty)
  
          static member private CompileToMethod(query : QueryExpr, compile : QueryExpr -> Expression) : Func<'T> =
              let expr = compile query
              
              let eraser = AnonymousTypeEraser()
  