Mónada estatal, ¿por qué no una tupla?

Acabo de pensar en las mónadas (al menos me gustaría pensar que lo tengo) y, más específicamente, en la mónada estatal, que algunas personas que son mucho más inteligentes que yo descubrimos, así que probablemente estoy fuera de esta pregunta .

De todos modos, la mónada estatal generalmente se implementa con una M <'a> como algo así (F #):

type State<'a, 'state> = State of ('state -> 'a * 'state)

Ahora mi pregunta: ¿hay alguna razón por la que no puedas usar una tupla aquí? Aparte de la posible ambigüedad entreMonadA<'a, 'b> yMonadB<'a, 'b> que se convertiría en el equivalente('a * 'b) tupla

Editar: ejemplo agregado 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

Respuestas a la pregunta(3)

Su respuesta a la pregunta