首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Monoid类型注释

Monoid类型注释
EN

Stack Overflow用户
提问于 2013-10-03 08:02:22
回答 1查看 207关注 0票数 2

在Scala中的函数式编程一书中,我看到了以下签名:

代码语言:javascript
复制
def productMonoid[A,B](A: Monoid[A], B: Monoid[B]): Monoid[(A,B)]

说明中说:

代码语言:javascript
复制
if types A and B are monoids, then the tuple type (A, B) is also a monoid

我很难理解以下部分:

代码语言:javascript
复制
A: Monoid[A]

A是作为类型参数的Monoid类型的?怎么理解?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-03 08:14:46

这里:A: Monoid[A]只是一个变量名,它也可以写成a: Monoid[A]param1: Monoid[A]。给出这样的变量名有点惯例,例如,在大多数情况下,函子的变量名是F- F: Function[A],M表示Monad - M: Monad[A]

代码语言:javascript
复制
abstract class SomeClass[TC[_], A](param: TC[A]) {
  implicit val M: Monad[TC]
  ... // other code
}

如果您看到类似于M.point[TC]的东西,其中M是Monad的一个实例,它就更加可读性和清晰。

添加了

而且A: Monoid[A]根本不是一个类型注释。类型参数写在方括号中:

productMonoid A,B (params.),所以在这个变体中:

代码语言:javascript
复制
def productMonoid[A: Monoid,B](params...)

是的,Monoid[A]A类型的类型类,它被分解为:

代码语言:javascript
复制
def productMonoid[A,B](params...)(implicit val $ev: Monoid[A])

这意味着Monoid是一个类型构造函数,它接受类型A并为$ev构造类型Monoid[A]

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19153863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档