このブログでファンクタの説明を読んでいる間:Scala - Functionlers以外の関数でFunctorsを使用するには?
https://hseeberger.wordpress.com/2010/11/25/introduction-to-category-theory-in-scala/
は関数子の一般的な定義は、より具体的なものがある:
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)
}
は明らかにこの手段ファンクタ他で使用することができますFunctionオブジェクトの他に上位の種類があります。誰かが例を挙げたり、どのように、あるいはなぜ、あるいはどのようなシナリオでそれが行われるのかを説明してもらえますか?すなわち、ScalaではGenericFunctorの別の実装は何でしょうか?Functionからの別の型コンストラクタを使用していますか?ありがとう!
EDIT:
だけ明確にする:REPL転写物のコードが形質でFMAPを呼び出しながら
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)
をするだけ明確にするために、私の理解のListFunctorによるとGenericFunctorに1-argはFMAPを実装Functorはfmap実装を呼び出します(ListFunctorなど)。
これは全体的な質問を変更するものではなく、単に回答を提供しようとする人々に役立つと思っただけです。提供された洞察は高く評価されます。
trait GenericFunctor[->>[_, _], ->>>[_, _], F[_]] {
def fmap[A, B](f: A ->> B): F[A] ->>> F[B]
}
trait EitherFunctor[F[_]] extends GenericFunctor[Either,Either,F]
object ListFunctor extends EitherFunctor[List] {
def fmap[A,B](f: Either[A,B]): Either[List[A],List[B]] =
f match {
case Left(a) => Left(List(a))
case Right(b) => Right(List(b))
}
}
EDIT2別:
私はどちらのファンクタもファンクタではないと思います。どちらのカテゴリを実装するかわかりません。 – Anonymous