Disons que j'ai un trait Monoid comme ci-dessous:Scala Monoid Combinator pour les options
trait Monoid[A] {
def combine(a1: A, a2: A): A
def identity: A
}
Maintenant, si je veux écrire un optionMonoid pour cela, je pourrais l'écrire comme ceci:
val optionMonoid1 = new Monoid[Option[A]] {
def combine(a1: Option[A], a2: Option[A2]) a1 orElse a2
def identity = None
}
Ceci étant donné le fait que je ne sais rien du type interne de l'Option. Mais que se passe-t-il si je veux avoir l'opérateur de la moissonneuse de telle manière que je veux vraiment combiner les types internes dans l'Option?
Si vous voulez «mapper» sur les valeurs de 'Option', vous aurez besoin d'une instance de Functor. –
Mais attendez, une instance de Functor ne changerait-elle pas mon type contenu dans l'Option? – sparkr
Même si j'ai une instance de Functor, je ne sais toujours pas quel est mon type A pour pouvoir appliquer l'opérateur de la moissonneuse sur mon Type A! – sparkr