Любые методы для восстановления достаточно лени, чтобы связать узел в монаде?
Я хочу написать фрагмент кода (экономя много времени, чтобы реализовать в противном случае) связывая узел. Это примерно так,
n <- myinstr n x
где теоретически myinstr
должен запускать x
, чтобы получить значение, которое станет n
. myinstr
, который проходит внутри монады State
, помещает n
в состояние, но это не влияет на вычисление x
.
Я пробовал использовать DoRec
и naiive реализацию mfix
,
instance Monad 𝔪 => MonadFix (MyMonad 𝔪) where
mfix f = fix (\mx -> mx >>= f)
но все замораживается. Существуют ли какие-либо методы для исправления моего кода (или методики его правильного проектирования в первый раз) или я должен написать что-то более прямое?
Ответы
Ответ 1
Нет никакого общего способа сделать произвольную монаду экземпляром MonadFix
. Фактический код зависит от монады, и это даже не возможно для всех монад.
Вы можете посмотреть на различные монады, чтобы посмотреть, как это делается. И если ваша монада на самом деле State
, то уже должен быть экземпляр.