Acabo de aferrarme a las mónadas (al menos me gustaría pensar que las tengo) y más específicamente a la mónada estatal, que algunas personas que son mucho más inteligentes que yo descubrieron, así que probablemente sea una forma de hacerlo. esta pregunta.State Monad, ¿por qué no una tupla?
De todos modos, la mónada estado se lleva a cabo generalmente con un M < 'a> como algo parecido a esto (F #):
type State<'a, 'state> = State of ('state -> 'a * 'state)
Ahora mi pregunta: ¿Hay alguna razón por la cual no se podía usar una tupla ¿aquí? Aparte de la posible ambigüedad entre MonadA<'a, 'b>
y MonadB<'a, 'b>
que se convertiría en la tupla equivalente ('a * 'b)
.
Editar: Añadido ejemplo para mayor claridad
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
¿Cuál es la pregunta? Usa una tupla donde? El tipo de devolución de la función es una tupla. – Brian
No use una tupla en lugar del tipo de estado y simplemente devuelva una función en lugar de un estado. – thr