我的Functor定义涉及多少个类别

时间:2017-08-27 05:37:16

标签: scala category-theory

我对Functor有以下定义:

trait Functor[F[_]] { 
    def map[A, B](fa: F[A])(f: A => B): F[B]
}
object ListFunctor extends Functor[List] { //
    def map[A, B](f: A => B)(data: List[A]): List[B] = data map f
}

假设A is Int,B is String ,and F is List,则f是类型函数:Int => String,我们得到一个函数List [Int] => List [String] with ListFunctor.map(f) _

由于functor与Category紧密相关,我现在正在尝试理解类别,如果A is Int,B is String ,and F is List

我会问ListFunctor中涉及多少个类别

我有两个可能的答案,但不知道哪一个是正确的:

1.有四类:

All possible values of Int forms an Int category

All possible values of String forms a String category

All possible values of List[Int] forms a List[Int] category

All possible values of List[String] forms a List[String] category
  1. 有两个类别

    2.1 Int和String形成一个类别,也就是说,此类别包含Int和String

    的所有可能值

    2.2 List [Int]和List [String]形成另一个类别,即此类别包含List [Int]的所有可能值

  2. 我会问上面的哪些答案是正确的?谢谢!

2 个答案:

答案 0 :(得分:1)

这里有两个类别:

  • 其对象在Scala中属于所有类型的对象,其状态为A => BA的函数B
  • 对象为所有List[A]的{​​{1}}类型的对象,其状态为所有AList[A] => List[B]的函数A

B是类别之间的映射,Functor是一个从第一个类别映射到第二个类别的仿函数。

答案 1 :(得分:0)

当我们讨论与编程语言相关的类别时,我们定义了一个类别“Scala”,其中对象是类型,而态射是函数。根据该定义,在类别中定义的每个仿函数都是一个endo-functor。

这意味着map上的Functor函数是来自对象A => B的态射,而函子定义是从Scala类别到其自身的仿函数。