В scalaz, то endo
функция Function1Ops
реализуется следующим образом:не понимают функцию scalaz эндо
def endo(implicit ev: R =:= T): Endo[T] =
Endo.endo(t => ev(self(t)))
Мне интересно, почему в теле Endo.endo
функции, а не просто взяв себя ... как Endo.endo(self)
, который ведет себя так же, как Endo.endo(t=> ev(self(t)))
.
Вот моя мимическая реализация, и я не вижу разницы между ними. Я что-то пропустил?
def endo[R, T](f: R => T)(implicit ev: T =:= R) = (x: R)=> ev(f(x))
def endo2[R, T](f: R => T)(implicit ev: T =:= R) = f
Кроме того, не первая реализация добавляет некоторые накладные расходы во время выполнения?
Я считаю, что лучшим местом для заданий такого рода является список рассылки: https://groups.google.com/forum/?fromgroups#!forum/scalaz. #[email protected] - это подходящее место, чтобы поднимать такие вопросы. Вы также можете просто отправить запрос на перенос в репозиторий github: https://github.com/scalaz/scalaz. – folone