4 votes

Quelles méthodes sont nécessaires pour créer un Applicative Functor personnalisé à utiliser avec scalaz |@||.

J'aimerais pouvoir utiliser le |@| de scalaz sur mon propre foncteur applicatif.

Exemple :
val spread: Source[Yield] = (y2 |@| y1)(_ - _)

C'est ma classe

sealed abstract class Source[+A] {
  def map[B](f: A => B): Source[B] 
  def unit[A](a: A): Source[A]
  def pureList[A](la: List[A]): Source[A]
  def zero[A]: Source[A]
  def map2[A, B, C](as: Source[A], bs: Source[B], f: (A, B) => C): Source[C]
}

Je suis certain que je dois mettre en œuvre map parce que c'est un foncteur.
Un applicatif peut être mis en œuvre de différentes manières : par exemple en utilisant apply() y unit() o map2() y unit() .

Est-ce que j'ai besoin ap y pure également ?

Comme vous pouvez le voir, je ne suis pas sûr de ce qui est nécessaire.

6voto

OlivierBlanvillain Points 1252
implicit val mya = new Applicative[Source] {}

Laissez le compilateur répondre à cette question pour vous :

object creation impossible, since:
it has 2 unimplemented members.
/** As seen from <$anon: scalaz.Applicative[Source]>, the missing signatures are as follows.
 *  For convenience, these are usable as stub implementations.
 */
  // Members declared in scalaz.Applicative
  def point[A](a: => A): Source[A] = ???

  // Members declared in scalaz.Apply
  def ap[A, B](fa: => Source[A])(f: => Source[A => B]): Source[B] = ???

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X