anchor.diff:      member x.Scan(add : Expr<'a -> 'a -> 'a>, input : IBufferVector<'a>, output : IBufferVector<'a>) =
           let scanner = getScanner add
           scanner.Run(input, output)
  +        
  +    member x.Scan(add : Expr<V4d -> V4d -> V4d>, input : ITexture, output : ITextureSubResource) =
  +        let scanner = getImageScanner2d add
  +        scanner.Run(input, output)
   
       member x.Fold(add : Expr<'a -> 'a -> 'a>, input : IBufferVector<'a>) =
           let folder = getReducer add
  
positive.code:     let reduceCache = ExpressionCache()
      let mapReduceCache = ExpressionCache()
      let mapReduceImageCache = ExpressionCache()
  
  
      let getMapper (map : Expr<int -> 'a -> 'b>) = mapCache.GetOrCreate(map, fun map -> new Map<'a, 'b>(runtime, map))
  
negative.code:             let reducer = getReducer add
              new MapReduce<'a, 'b>(runtime, reducer, map, add)
          )
          
      let getImageScanner2d (add : Expr<V4d -> V4d -> V4d>) = scanImage2dCache.GetOrCreate(add, fun add -> new ScanImage2d(runtime, add))
  
      let getImageMapReducer (map : Expr<V3i -> V4f -> 'b>) (add : Expr<'b -> 'b -> 'b>) =
          mapReduceCache.GetOrCreate(map, add, fun map add -> 
  