4 people like it.
    Like the snippet!
  
  Generic agent post operator
  Generic operator that introduces a convenient syntax for "posting" messages into any agent that has Post member. Specifically, it's useful for the standard MailboxProcessor and the AutoCancelAgent (from FSharpx library). 
   1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
  | 
open FSharp.Control
let inline (<--) (agent: ^a) (msg: 'b) =
    (^a: (member Post: 'b -> unit) (agent, msg))
let test =
    let mailboxProcessor = MailboxProcessor.Start(fun inbox -> async { return () }) 
    let autoCancelAgent = AutoCancelAgent.Start(fun inbox -> async { return () })
    mailboxProcessor <-- ()
    autoCancelAgent <-- ()
  | 
Multiple items
namespace FSharp
--------------------
namespace Microsoft.FSharp
Multiple items
namespace FSharp.Control
--------------------
namespace Microsoft.FSharp.Control
val agent : 'a (requires member Post)
val msg : 'b
type unit = Unit
Full name: Microsoft.FSharp.Core.unit
val test : unit
Full name: Script.test
val mailboxProcessor : MailboxProcessor<unit>
Multiple items
type MailboxProcessor<'Msg> =
  interface IDisposable
  new : body:(MailboxProcessor<'Msg> -> Async<unit>) * ?cancellationToken:CancellationToken -> MailboxProcessor<'Msg>
  member Post : message:'Msg -> unit
  member PostAndAsyncReply : buildMessage:(AsyncReplyChannel<'Reply> -> 'Msg) * ?timeout:int -> Async<'Reply>
  member PostAndReply : buildMessage:(AsyncReplyChannel<'Reply> -> 'Msg) * ?timeout:int -> 'Reply
  member PostAndTryAsyncReply : buildMessage:(AsyncReplyChannel<'Reply> -> 'Msg) * ?timeout:int -> Async<'Reply option>
  member Receive : ?timeout:int -> Async<'Msg>
  member Scan : scanner:('Msg -> Async<'T> option) * ?timeout:int -> Async<'T>
  member Start : unit -> unit
  member TryPostAndReply : buildMessage:(AsyncReplyChannel<'Reply> -> 'Msg) * ?timeout:int -> 'Reply option
  ...
Full name: Microsoft.FSharp.Control.MailboxProcessor<_>
--------------------
new : body:(MailboxProcessor<'Msg> -> Async<unit>) * ?cancellationToken:System.Threading.CancellationToken -> MailboxProcessor<'Msg>
static member MailboxProcessor.Start : body:(MailboxProcessor<'Msg> -> Async<unit>) * ?cancellationToken:System.Threading.CancellationToken -> MailboxProcessor<'Msg>
val inbox : MailboxProcessor<unit>
val async : AsyncBuilder
Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.async
val autoCancelAgent : AutoCancelAgent<unit>
type AutoCancelAgent<'T> =
  interface IDisposable
  private new : mbox:Agent<'T> * cts:CancellationTokenSource -> AutoCancelAgent<'T>
  member Post : m:'T -> unit
  member PostAndAsyncReply : buildMessage:(AsyncReplyChannel<'a1> -> 'T) * ?timeout:int -> Async<'a1>
  member PostAndReply : buildMessage:(AsyncReplyChannel<'a1> -> 'T) * ?timeout:int -> 'a1
  member PostAndTryAsyncReply : buildMessage:(AsyncReplyChannel<'a1> -> 'T) * ?timeout:int -> Async<'a1 option>
  member Receive : ?timeout:int -> Async<'T>
  member Scan : scanner:('T -> Async<'a1> option) * ?timeout:int -> Async<'a1>
  member TryPostAndReply : buildMessage:(AsyncReplyChannel<'a1> -> 'T) * ?timeout:int -> 'a1 option
  member TryReceive : ?timeout:int -> Async<'T option>
  ...
Full name: FSharp.Control.AutoCancelAgent<_>
static member AutoCancelAgent.Start : f:(MailboxProcessor<'T> -> Async<unit>) -> AutoCancelAgent<'T>
  
  
  More information