Monad также для измерения побочных эффектов - PullRequest
0 голосов
/ 21 января 2019

Как подсчитать, сколько раз привязка применяется к монаде - например, учитывая монаду состояния, я бы хотел посчитать, сколько раз изменялось состояние.Как я могу лучше всего инкапсулировать это?Должна ли эта логика быть частью оператора связывания (с побочным эффектом, поскольку он увеличивает счетчик), или есть лучший способ сделать это?

1 Ответ

0 голосов
/ 21 января 2019

Вы не можете.Один из законов монады -

return x >>= f = f x

, который имеет одну привязку слева и ни одну справа, поэтому ни одна законопослушная монада не может наблюдать, сколько существует привязок.

В лучшем случаеу вас может быть действие

increment :: M ()

в вашей монаде, которое ударяет по счетчику.(Это может быть реализовано, как вы говорите, используя StateT или аналогичный, или несколькими другими по существу изоморфными способами.)

...