Какие-нибудь методы для восстановления достаточно лени, чтобы связать себя узами монады?

Я хочу написать небольшой кусочек кода (сэкономив мне много времени для реализации в противном случае), связав узел. Это примерно так,

n <- myinstr n x

где в теории, myinstr должен бежать x получить значение, которое станет n, myinstr, который работает внутри State монада, поставлю n в состояние, но это не влияет xвычисление.

Я пытался использовать DoRec и наивная реализация mfix,

instance Monad  => MonadFix (MyMonad ) where
    mfix f = fix (\mx -> mx >>= f)

но вещи замерзают. Существуют ли какие-либо методы для исправления моего кода (или методологии для правильного проектирования с первого раза), или я должен написать что-то более простое?

1 ответ

Решение

Не существует общего способа сделать произвольную монаду экземпляром MonadFix, Фактический код зависит от монады, и это даже невозможно для всех монад. Вы можете посмотреть на различные монады, чтобы увидеть, как это делается. И если ваша монада на самом деле State уже должен быть экземпляр.

Другие вопросы по тегам