in ComputationExpressions/Monad.fs, bindM is defined as:
let inline bindM builder m f = (^M: (member Bind: 'd -> ('e -> 'c) -> 'c) (builder, m, f))
this is not strictly correct since Bind does not take curried arguments. It works anyway because the current fsharp compiler changes the constraint:
> let inline bindM builder m f = (^M: (member Bind: 'd -> ('e -> 'c) -> 'c) (builder, m, f));;
val inline bindM :
builder: ^M -> m:'d -> f:('e -> 'c) -> 'c
when ^M : (member Bind : ^M * 'd * ('e -> 'c) -> 'c)
When fsi echoes back the type of bindM, the member constraint has tupled arguments. You might want to fix this anyway in case the compiler ever changes.
in ComputationExpressions/Monad.fs, bindM is defined as:
this is not strictly correct since Bind does not take curried arguments. It works anyway because the current fsharp compiler changes the constraint:
When fsi echoes back the type of bindM, the member constraint has tupled arguments. You might want to fix this anyway in case the compiler ever changes.