Definition von hissenfrei

8

Ich habe einige Fragen bezüglich der Funktion hiistfree aus der Haskell Bibliothek Control.Monad.Free . Bei einer Transformation f zwischen zwei Funktonen erzeugt hoistfree f einen Morphismus zwischen den entsprechenden freien Monaden. Hier ist seine Definition.

%Vor%

Frage 1 Woher weiß Haskell, dass <$> die Zuordnung zu g und nicht zu f , Free f oder Free g ?

ist

Frage 2 Warum histfree nicht als

definiert wurde %Vor%

?

Wenn f eine natürliche Transformation ist, stimmen diese beiden Definitionen überein. Die zweite Definition erfüllt jedoch immer die Beziehung

%Vor%

das sieht ziemlich natürlich aus. Darüber hinaus gibt es einige grundlegende Funktionen, die mit iter_map f g = iter f . map g ausgedrückt werden können. Zum Beispiel

%Vor%

Frage 3 Ist iter_map irgendwo definiert? Es sieht aus wie eine monadische Mapreduce. Ich habe es in der Basisbibliothek nicht gesehen. Gibt es einen Gewinn bei der Fusion von Iter und Map? In einigen anderen Sprachen ist dies der Fall, aber ich bin mir nicht sicher für Haskell.

    
stackman 14.09.2016, 17:01
quelle

1 Antwort

5

Frage 1

Wegen Typinferenz, die <$> von g auswählt. In der Tat, in

%Vor%

f as hat den Typ g <something> , daher ist <$> derjenige, der von Functor g angegeben wird.

Frage 2

Ich denke, in Haskell ist f immer eine natürliche Transformation. Jede polymorphe Funktion f a -> g a muss in a natürlich sein, und zwar durch parametricity / free-Theorem. Beide Definitionen sind gleichwertig, ich bin mir nicht sicher, ob jemand der "Beste" ist. Vielleicht ist deins. Oder vielleicht hat das Original eine bessere Leistung in der Praxis. Es sieht ein wenig wie das Argument foldr vs foldl' bei assoziativen Operatoren aus, wo es keinen eindeutigen Gewinner gibt.

Frage 3 Keine Ahnung.

    
chi 14.09.2016 18:35
quelle

Tags und Links