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

StackOverflow https://stackoverflow.com/questions/8379824

Вопрос

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

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 Уже должен быть экземпляр.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top