module Hoopty = [] module Doopty = [] type doot [] type hoopty type Ref<'T> with member __.ReturnFrom(x) = x [] member __.Doot(_state: Ref<_>, x) = x member __.Yield(x) = ref x let inline (?^&>.<) x y = (y, !x) ||> (+) let inline derp (x: Ref<_>) y = x { GIANT_DAD (x ?^&>.< y) } let inline add x y = ref 1000 { return! derp (ref x) y } printfn "%d" (Hoopty.add 1 2) // 3 printfn "%f" (Hoopty.add 1. 2.) // 3.000000