Вы не можете.Один из законов монады -
return x >>= f = f x
, который имеет одну привязку слева и ни одну справа, поэтому ни одна законопослушная монада не может наблюдать, сколько существует привязок.
В лучшем случаеу вас может быть действие
increment :: M ()
в вашей монаде, которое ударяет по счетчику.(Это может быть реализовано, как вы говорите, используя StateT
или аналогичный, или несколькими другими по существу изоморфными способами.)