anchor.diff:      member this.ClDevice = device
   
       member this.ClContext = clContext
  -    member this.Allocate (alloc:AllocateCrate) =
  -            printfn "Allocation"
  -            let mutable result = Unchecked.defaultof<_>
  -            alloc.Apply
  -                {
  -                    new AllocateCrateEvaluator
  -                    with member __.Eval (a) =
  -                            let length = a.Size
  -                            let buf = new Brahma.OpenCL.Buffer<_>(clContext, Brahma.OpenCL.Operations.ReadWrite, true, length)
  -                            let res = new GpuArray<'a>(buf,a.Size)
  -                            result <- res
  -                }
  -            result
  +    member this.Allocate<'t> (length:int) =
  +        printfn "Allocation"
  +        let buf = new Brahma.OpenCL.Buffer<_>(clContext, Brahma.OpenCL.Operations.ReadWrite, true, length)
  +        let res = new GpuArray<'t>(buf,length)
  +        res
   
       member private this.HandleToGPU (queue:Brahma.OpenCL.CommandQueue, toGpu:ToGPUCrate) =
           toGpu.Apply
  
positive.code:         let res1 = Array.zeroCreate 10
          let res2 = Array.zeroCreate 20
  
          let m1 = gpu.Allocate(Msg.CreateAllocateMsg(Allocate<_>(a1.Length)))
          let m2 = gpu.Allocate(Msg.CreateAllocateMsg(Allocate<_>(a2.Length)))
  
          processor1.Post(Msg.CreateToGPUMsg(ToGPU<_>(a1, m1)))
          processor2.Post(Msg.CreateToGPUMsg(ToGPU<_>(a2, m2)))
  
negative.code:     member this.Source = src
      member this.ReplyChannel = replyChannel
  
  type RunKernel<'t>(kernelRunFun, ?replyChannel:AsyncReplyChannel<Kernel<'t>>) =
      member this.KernelRunFunction = kernelRunFun
      member this.ReplyChannel = replyChannel
  
  type ToHostCrate =
      abstract member Apply<'ret> : ToHostCrateEvaluator<'ret> -> 'ret
  