, , , "" - ( Async < 'a > "a" ).
, , , unit, bind member __.Bind(m: MovementState, f : unit -> MovementState).
do! movestates . , , , ! let! , "" .
, :
type PTD = ProvidedTypeDefinition -> ProvidedTypeDefinition
type ProvidedTypeBuilder () =
member __.Zero () : PTD =
id
member __.Return _ : PTD =
id
member __.Bind(m, f : unit -> PTD) =
fun ptd -> (f ()) (m ptd)
member x.Combine(m1 : PTD, m2 : PTD) : PTD =
x.Bind(m1, fun () -> m2)
[<CustomOperation("addMember", MaintainsVariableSpaceUsingBind = true)>]
member x.AddMember(ptd, member') =
let func =
fun (instance : ProvidedTypeDefinition) ->
instance.AddMember member'
instance
x.Bind(ptd, fun () -> func)
, do!, - , :
let ptd = ProvidedTypeBuilder()
let test =
ptd {
addMember (ProvidedProperty("MyProp", typeof<string>))
do! (fun ptd -> ptd.AddObsoleteAttribute("Hey, don't use this anymore"); ptd)
}