Durante la lectura de la descripción de Functors en este blog:Scala - ¿Cómo usar Functors en tipos que no son de Función?
https://hseeberger.wordpress.com/2010/11/25/introduction-to-category-theory-in-scala/
hay una definición genérica de Functor y una más específica uno:
trait GenericFunctor[->>[_, _], ->>>[_, _], F[_]] {
def fmap[A, B](f: A ->> B): F[A] ->>> F[B]
}
trait Functor[F[_]] extends GenericFunctor[Function, Function, F] {
final def fmap[A, B](as: F[A])(f: A => B): F[B] =
fmap(f)(as)
}
Es evidente que esto significa Functors se puede utilizar con otro tipos de alto nivel además de objetos de Función. ¿Podría alguien dar un ejemplo o explicar cómo o por qué o en qué escenario se haría? A saber, ¿qué sería otra implementación de GenericFunctor en Scala, que utiliza un constructor de tipos diferente de Function? ¡Gracias!
EDIT:
Solo para aclarar:
object Functor {
def fmap[A, B, F[_]](as: F[A])(f: A => B)(implicit functor: Functor[F]): F[B] =
functor.fmap(as)(f)
implicit object ListFunctor extends Functor[List] {
def fmap[A, B](f: A => B): List[A] => List[B] =
as => as map f
}
}
scala> fmap(List(1, 2, 3))(x => x + 1)
res0: List[Int] = List(2, 3, 4)
Solo para aclarar, según mi entendimiento ListFunctor implementa el 1-arg fmap en GenericFunctor mientras que el código en la transcripción repl llama al fmap en Rasgo Functor, que a su vez llama a una implementación de fmap (por ejemplo, en ListFunctor).
Esto no cambia la pregunta general, solo pensé que ayudaría a las personas que intentaran dar respuestas. Cualquier información proporcionada sería apreciada.
No creo que the-functor sea un functor. No veo cómo implementarías una categoría. – Anonymous