Ich habe in letzter Zeit ein wenig Anwendung (und Alternative) benutzt, und eine Sache, die mich frustriert hat, ist meine fehlende Kenntnis der Nomenklatur. Als Beispiel möchte ich function name
anstelle von star thing
für <*>
sagen. Also, in genau der gleichen Weise, wie >>=
gelesen wird bind
, gibt es für die folgenden Personen humanfreundlichere Namen:
<*>
- anwenden? <*
& amp; *>
- links und rechts anwenden? <$>
- fmap? <|>
und ebenfalls von Pfeilen
***
- split? &&&
- Fanout? Wenn es Namen für diese gibt, haben meine Suchen sie nicht aufgedeckt. Ich verstehe, dass es keine akzeptierten Begriffe für diese gibt, aber wenn es sie gibt, würde ich sie gerne kennenlernen.
Nun, <$>
ist ein Synonym für fmap
. Auch der Name "applicative" lässt mich an die Anwendung von Dingen denken. Da <*>
der Hauptoperator dafür ist, denke ich, dass ich es locker mit dem Wort "apply" assoziiere. Der Kontext ist etwas anders als bei normalen Funktionsanwendungen, so dass es etwas Verwirrung mit diesem Wort geben könnte, aber der Kontext macht es normalerweise klar genug, also funktioniert es für mich. <*>
ist auch ein Synonym für die Funktion ap
von Control.Monad, also bestätigt dies meine Verwendung des Wortes "apply".
Brent Yorgeys Typclassopedia ist, wo ich das meiste davon gelernt habe. Es ist eine hervorragende Ressource.
Die Notation stammt von Doaitse Swierstra und Luc Duponcheel: Sie hatten diese Schnittstelle bereits für Parser-Kombinatoren identifiziert, und wir hielten es für wichtig, ihre Auswahl dort zu respektieren, wo es sinnvoll war. Ich versuche mich zu erinnern, wie Doaitse sie ausspricht, aber eine Leerstelle zeichnet.
Ich bevorzuge es, dass sie gesehen und nicht gehört werden. Tatsächlich bevorzuge ich, dass sie auch nicht gesehen werden, daher idiomatische Klammern . Aber besonders beim Definieren einer Instanz ist es hilfreich, Namen zu haben. Nicht, dass es an mir liegt, sie zu benennen: das ganze Idiom gegen Applicant vs. goodness-knows-shelanigans war eine faszinierende Machtstudie. Für was es wert ist, in meinem eigenen Sprachgebrauch
<*>
ist 'angewendet (to)' (die Schnittstelle ist 'rein und angewandt', wie die Mathematik) *>
wird 'ignoriert' <*
ignoriert '<$>
ist 'zugeordnet (über)' <$
ist vielleicht "nachher", aber ich bin mir nicht im Geringsten bewusst, dass ich es etwas nenne Die wichtigsten Ideen: die Effekte immer Folge (was auch immer das bedeutet) von links nach rechts; das $ oder * sagt dir, ob das, was links von ihnen ist, rein oder idiomatisch ist; Die Chevrons sagen Ihnen den resultierenden Datenfluss und zeigen nur auf das Signal.
Ein alternatives Ausspracheschema, eine Ebene entfernt von den einzelnen Operatoren, könnte
übersetzen %Vor%bis 'IDIOM: f, a, b, NOISE c, d' oder ähnliches. Aber das ist wirklich das Lesen der Klammerversion
%Vor%laut.
Ich finde 'money' und 'splat' amüsant, aber wir könnten gut daran tun, der Semantik Vorrang vor Syntaxfehlern einzuräumen.
Nun, es gibt keine Standardnamen, aber manchmal werden sie als:
bezeichnet<*>
ist "splat" <$>
ist "Geld" so dass:
%Vor%wird ausgesprochen:
%Vor%Terms, die von Trevor Elliott und Eric Mertens stammen, glaube ich.
Tags und Links haskell applicative naming