Какъв е този тип А при изучаването на Scalaz за функцията сума?

В Learning Scalaz има параметър за тип на сумата на метода.

Това означава ли, че тип А е от тип Monoid? Въпреки това изглежда грешно, ако типът A е Monoid, тогава как може да бъде и цяло число, както се използва в примера. Сигурно чета параметъра тип погрешно.

Какво е значението на параметъра тип? Как трябва да го чета?

def sum[A: Monoid](xs: List[A]): A = {
     val m = implicitly[Monoid[A]]
     xs.foldLeft(m.mzero)(m.mappend)
   }

person Phil    schedule 08.04.2014    source източник
comment
Тази функция се нарича: контекстно обвързано. Може да се прочете като: за тип A трябва да има имплицитна стойност от тип Monoid[A]. Извикването implicitly получава тази неявна стойност.   -  person Jesper    schedule 08.04.2014
comment
Защо са го написали като A: Monoid? изглежда наобратно.   -  person Phil    schedule 08.04.2014
comment
Опитайте да прочетете всичко като: методът sum има тип параметър A, за който трябва да има Monoid.   -  person Jesper    schedule 08.04.2014
comment
Изглежда много несъвместимо с други обозначения.   -  person Phil    schedule 08.04.2014
comment
Ако искате да знаете защо е този синтаксис, не знам, просто така са го избрали дизайнерите на езика Scala. Защо точно според вас е непоследователно? Имате ли алтернативна идея, която ви изглежда по-последователна?   -  person Jesper    schedule 09.04.2014
comment
Искам да кажа, че когато за първи път кажа това, виждам A: Monoid и първата ми интерпретация на това е, че A е от тип Monoid, винаги когато видя : с нещо отляво и нещо отдясно, предполагам, че типът на лявото е отдясно.   -  person Phil    schedule 09.04.2014
comment
Нямам по-добра идея, просто исках да кажа как го видях.   -  person Phil    schedule 09.04.2014


Отговори (1)


A: Monoid е тип параметър с контекстна връзка. Това е синтактична захар.

Следното:

def sum[A: Monoid](xs: List[A]): A

се обеззахарява в:

def sum[A](xs: List[A])(implicit val $ev: Monoid[A]): A
person serejja    schedule 08.04.2014
comment
Защо този синтаксис? A: Monoid, как бихте описали това на английски, неговия имплицитен Monoid от тип A? - person Phil; 08.04.2014