I've just wrapped my head around monads (at least I'd like to think I have) and more specifically the state monad, which some people that are way smarter then me figured out, so I'm probably way of with this question.
Anyway, the state monad is usually implemented with a M<'a> as something like this (F#):
type State<'a, 'state> = State of ('state -> 'a * 'state)
Now my question: Is there any reason why you couldn't use a tuple here? Other then the possible ambiguity between MonadA<'a, 'b>
and MonadB<'a, 'b>
which would both become the equivalent ('a * 'b)
tuple.
Edit: Added example for clarity
type StateMonad() =
member m.Return a = (fun s -> a, s)
member m.Bind(x, f) = (fun s -> let a, s_ = x s in f a s_)
let state = new StateMonad()
let getState = (fun s -> s, s)
let setState s = (fun _ -> (), s)
let execute m s = m s |> fst