Какие -нибудь методы восстановления достаточно лени, чтобы связать узел в монаде?
-
28-10-2019 - |
Вопрос
Я хочу написать гладкий код (сэкономив мне много времени для реализации иначе) связывать себя узами брака. Анкет Это примерно так,
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)
Но вещи замерзают. Существуют ли какие -либо методы исправления моего кода (или методологий для правильного проектирования его в первый раз) или я должен написать что -то более простое?
Решение
Нет общего способа сделать произвольную монаду MonadFix
. Анкет Фактический код зависит от Монады, и он даже не может для всех монадов. Вы можете посмотреть на различные монады, чтобы увидеть, как это делается. И если ваша монада на самом деле State
Уже должен быть экземпляр.