Есть ли в Scalaz любое понятие «управляемой» монады? - тот, из которого может быть извлечено значение результата, потенциально скрытые побочные эффекты?Scalaz - runnable monad
trait RunnableM[M[_]] {
def runM[T](m: M[T]): T
}
Мне понадобится это, чтобы оценить монадическое вычисление и выйти из монады в конце. В Haskell у нас есть разные функции «run» для монадов, которые могут или не могут включать IO, поэтому тип такого типа может быть невозможен, по крайней мере, до моего мышления. Но в Скале это можно сделать.
Мне просто нужно это для целей тестирования. Я не знаю много о 'Comonad' - это его основная цель? Извлечение значений из монад? –
Его основной целью является составление функций формы 'M [A] => B'. Раньше (в scalaz 6) был отдельный тип «Copoint» только для извлечения значений, как вы хотите, но он был оставлен; Тони Моррис очень кричит о том, что это была плохая идея, но не объясняет, какова была настоящая проблема, поэтому я не знаю почему. (Если бы я должен был догадаться, я бы предположил, что аргумент заключается в том, что «Копенгард» является беззаконным, поэтому вы не можете писать ничего полезного, потому что вы ничего не знаете о том, что он делает с общим «М»). – lmm