Какие-нибудь методы для восстановления достаточно лени, чтобы связать себя узами монады?
Я хочу написать небольшой кусочек кода (сэкономив мне много времени для реализации в противном случае), связав узел. Это примерно так,
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
уже должен быть экземпляр.