anchor.diff:  and ToGPUCrateEvaluator<'ret> =
       abstract member Eval<'a> : ToGPU<'a> -> 'ret
   
  +module Msg =
  +    let CreateAllocateMsg m =
  +        {
  +            new AllocateCrate with
  +                member __.Apply e = e.Eval m
  +        }
   type Msg =
  -    | MsgAllocate of AllocateCrate
       | MsgToHost of ToHostCrate
       | MsgToGPU of ToGPUCrate
   
  +    static member CreateToHostMsg m =
  +        {
  +            new ToHostCrate with
  +                member __.Apply e = e.Eval m
  +        }
  +        |> MsgToHost
  +
  +    static member CreateToGPUMsg m =
  +        {
  +            new ToGPUCrate with
  +                member __.Apply e = e.Eval m
  +        }
  +        |> MsgToGPU
   type GPU(device: Device) =
   
       let clContext =
  
positive.code:     member this.ReplyChannel = replyChannel
  
  
  type Allocate<'t>(size, replyChannel:AsyncReplyChannel<GpuArray<'t>>) =
      member this.Size = size
      member this.ReplyChannel = replyChannel
  
  type AllocateCrate =
      abstract member Apply : AllocateCrateEvaluator -> unit
  
  
negative.code:                             | Some ch -> ch.Reply res
                              0
                  }
  
      //member this.Allocate (a) =
      //    printfn "Allocation"
      //    this.HandleAllocate a
      member this.GetNewProcessor () = MailboxProcessor.Start(fun inbox ->
  
          let commandQueue = new Brahma.OpenCL.CommandQueue(clContext, device)
  
          printfn "MB is started"
          let rec loop i = async {
              let! msg = inbox.Receive()
              match msg with
              | MsgToHost a ->
                  printfn "ToHost"
                  this.HandleToHost(commandQueue, a) |> ignore
  
              | MsgToGPU a ->
                  printfn "ToGPU"
                  this.HandleToGPU(commandQueue, a) |> ignore
  
              return! loop 0
  