Właśnie owinąłem głowę monadami (a przynajmniej chciałbym myśleć, że mam), a dokładniej państwową monadą, którą niektórzy ludzie są mądrzejsi niż ja, więc prawdopodobnie jestem z to pytanie.Monada stanowa, dlaczego nie krotka?
Zresztą monada stan jest zazwyczaj realizowane z M < „a> jak coś tak (F #):
type State<'a, 'state> = State of ('state -> 'a * 'state)
Teraz moje pytanie: Czy jest jakiś powód, dla którego nie można użyć krotki tutaj? Poza tym możliwa niejednoznaczność między MonadA<'a, 'b>
i MonadB<'a, 'b>
, które stałyby się odpowiednikiem krotki.
Edycja: Dodano przykład dla jasności
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
Na czym polega pytanie? Użyj krotki gdzie? Typ zwrotu funkcji to krotka. – Brian
Nie używaj krotki zamiast typu State i po prostu zwróć funkcję zamiast stanu. – thr