State Monad, why not a tuple?
Posted
by thr
on Stack Overflow
See other posts from Stack Overflow
or by thr
Published on 2010-04-07T20:27:21Z
Indexed on
2010/04/07
20:53 UTC
Read the original article
Hit count: 390
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
© Stack Overflow or respective owner