Моноиден екземпляр за A =› A в Cats

Функциите A => A са моноидни с identity като empty и композиция като combine. За съжаление не го намерих в библиотеката cats. Предоставя ли библиотеката моноиден екземпляр за тези функции?

Какво ще кажете за A => M[A], където M е монада или апликативно?


person Michael    schedule 18.03.2017    source източник


Отговори (1)


Cats има Monoid екземпляр на A => A в instances/function.scala.

A => M[A] за монада M шевове, за да образуват моноид с a => M.pure(a) като empty следната combine операция:

def compose(f1 = A => M[A], f2 = A => M[A]): A => M[A] =
  a => f1(a).flatMap { e => f2(e) }

Това не изглежда да бъде приложено в библиотеката.
Доказателство за моноидните закони, оставено като упражнение за читателя.

person OlivierBlanvillain    schedule 18.03.2017
comment
Благодаря много. Дали X => A[X], където е A е апликативен, моноид? - person Michael; 18.03.2017
comment
Монадата е просто моноид в категорията на ендофункторите, какъв е проблемът? - person n. 1.8e9-where's-my-share m.; 18.03.2017
comment
@Michael Можете ли да напишете combine операция без flatMap? - person OlivierBlanvillain; 18.03.2017
comment
Може би не. Трябва да помисля за това. - person Michael; 18.03.2017