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.
Frage 1 Woher weiß Haskell, dass <$>
die Zuordnung zu g
und nicht zu f
, Free f
oder Free g
?
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
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
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.
Frage 1
Wegen Typinferenz, die <$>
von g
auswählt. In der Tat, in
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.
Tags und Links haskell category-theory