【问题标题】:In Scala type parameters, what do ->> and ->>> mean?在 Scala 类型参数中,->> 和 ->>> 是什么意思?
【发布时间】:2012-02-21 10:25:54
【问题描述】:

Heiko Seeberger 在这里写了一篇关于范畴理论的精彩博文:

https://hseeberger.wordpress.com/2010/11/25/introduction-to-category-theory-in-scala/

在其中,他定义了一个 GenericFunctor,如下所示:

trait GenericFunctor[->>[_, _], ->>>[_, _], F[_]] {
  def fmap[A, B](f: A ->> B): F[A] ->>> F[B]
}

我没有任何运气在文档中找到对 ->> 和 ->>> 符号的文档引用。有人可以解释他们在做什么吗?

【问题讨论】:

    标签: scala


    【解决方案1】:

    my answer to a duplicate question on request复制的答案:

    这是一个higher-kinded type,在this introduction 和这个research paper 中有很好的描述。

    您可能会感到困惑的原因是 ->> 是高级类型的名称——它也可能被称为 Arrow

    【讨论】:

      【解决方案2】:

      符号本身没有任何意义。它们是 Heiko 选择的任意名称:

      > class Foo[A, B]
      defined class Foo
      
      > class Foo[M1[_], M2[_]]
      defined class Foo
      
      > class GenericFunctor[->>[_, _], ->>>[_, _], F[_]]
      defined class GenericFunctor
      

      它们是类型参数的一部分,它们本身就是类型构造函数(如果你想听上去花哨的话,是更高级的类型)。 类型应用程序可以写成中缀,所以A ->> B->>[A, B]是一样的。

      根据正在发生的事情...... Heiko说

      查看成分,我们找到了所有我们需要的东西:类型 AB 映射到类型 F[A]F[B] 并且映射 A ->> B 映射到映射 F[A] ->>> F[B]

      由于我们在谈论类别理论,我们希望避免使用术语函数,因为它是特定于实现的,但我们希望描述某种类似于函数的东西。在他们的术语中,类似功能的东西是箭头。我们需要其中两个,因为我们不想假设传入和传出箭头相同。这两个箭头由->>->>> 表示。 F[_] 是像 ListOption 这样的容器。我觉得..

      所以fmap(Scala 中又名map 方法)接受一个值箭头并返回另一个容器箭头。除了与map 方法不同,fmap 返回一个带有容器的箭头。

      GenericFunctor 对两个箭头使用Function 的具体应用是Functor。而使用List作为容器的Functor的具体应用是ListFunctor

      object ListFunctor extends Functor[List] {
        def fmap[A, B](f: A => B): List[A] => List[B] = as => as map f
      }
      

      这就是从AB 的函数,并从List[A]List[B] 返回一个函数,在内部调用map

      【讨论】:

      • List[B] = as => as map 是什么意思?从未见过这种语法
      【解决方案3】:

      一个线索是它们在特征定义中的方括号内:它们只是博客作者选择的任意符号,就像[T] 经常被选择用于泛型类、特征和方法一样。这些只是碰巧是更高种类的类型(即带参数的参数)。

      之所以选择类似箭头的名称,是因为正如他所说,

      "A ->> B 只是 ->>[A, B] 的另一种写法,很好地反映了 事实上,我们在这里谈论的是地图。”

      【讨论】:

      • 嗨 Luigi,这也是一个很好的答案,但我要检查 Eugene 以获得更深入的解释......
      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      相关资源
      最近更新 更多