2016-06-22 43 views
1

Dies ist ein Follow-up zu einem answer zu meiner vorherigen Frage.Beispiele von Funktoren Zusammensetzung

Wir wissen, dass Funktoren komponieren. Ich kann eine Zusammensetzung von functors List[_] und Option[_] schreiben scalaz wie folgt aus:

import scalaz._, Scalaz._ 

scala> val flist = Functor[List] 
flist: scalaz.Functor[List] = [email protected] 

scala> val foption = Functor[Option] 
foption: scalaz.Functor[Option] = [email protected] 

scala> flist compose foption 
res0: scalaz.Functor[[α]List[Option[α]]] = [email protected] 

scala> val f = flist compose foption 
f: scalaz.Functor[[α]List[Option[α]]] = [email protected] 

scala> val os: List[Option[Int]] = Some(1) :: Some(2) :: None :: Nil 
os: List[Option[Int]] = List(Some(1), Some(2), None) 

scala> f.map(os) {_ + 1} 
res1: List[Option[Int]] = List(Some(2), Some(3), None) 

Ist es der richtige Weg functors mit scalaz zu komponieren?
Konnten Sie ein real-life Beispiel einer Funktorzusammensetzung geben?

+0

Wiederholen Sie Ihre bestehende Frage nicht? http://stackoverflow.com/questions/31284131/how-to-simplify-nested-map-calls – ZhekaKozlov

+0

Teilweise. Ich kann jetzt Funktoren komponieren. Danke für deine Antwort, nebenbei :) Jetzt interessiere ich mich für _real-life_ Beispiele für Funktorkomposition. – Michael

+0

Ist eine Option in einer Liste nicht gut genug? – ZhekaKozlov

Antwort

1

Angenommen, Sie haben eine Liste von Zeichenfolgen, wobei jede Zeichenfolge eine Liste von Zeichen ist. Wenn Sie die beiden Listenfunktionen zusammensetzen, erhalten Sie einen Funktor über Listen von Strings. Sie können nun Funktionen auf Zeichen, wie zum Beispiel Upper oder toLower, der Liste der Strings zuordnen.

Ist dieses Beispiel realistisch genug? :-)

+0

Ja, es ist ein gutes Beispiel. – Michael