Nel scalaz, la funzione endo
in Function1Ops
è implementato in questo modo:non capiscono funzione scalaz endo
def endo(implicit ev: R =:= T): Endo[T] =
Endo.endo(t => ev(self(t)))
Sono curioso di sapere perchè nel corpo della Endo.endo
funzione, non solo semplicemente prendendo l'auto ... come Endo.endo(self)
, che si comporta come Endo.endo(t=> ev(self(t)))
.
Ecco la mia implementazione mimica e non vedo alcuna differenza tra i due. Ho dimenticato qualcosa?
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
Inoltre, non la prima implementazione aggiungere un po 'in testa a tempo di esecuzione?
Credo che il posto migliore per porre questo tipo di domande sia la mailing list: https://groups.google.com/forum/?fromgroups#!forum/scalaz. #[email protected] è il posto giusto per sollevare questo tipo di domande. Puoi anche inviare una richiesta di pull al repository github: https://github.com/scalaz/scalaz. – folone