Setze das Puzzle mit dem Sequenzertyp

8

Als ich letzte Nacht auf diese Frage antwortete, fiel mir folgendes auf:

%Vor%

Das heißt, wenn foo eine optionale Menge von ganzen Zahlen ist, gibt die Sequenzierung eine Menge von ganzen Zahlen zurück.

Dies ist nicht das, was ich zuerst erwartet habe, da die Sequenzierung von F[G[A]] eine G[F[A]] zurückgeben soll (vorausgesetzt, F ist traversierbar und G ist ein anwendungsorientierter Funktor ). In diesem Fall verschwindet die Option -Schicht jedoch einfach.

Ich weiß, dass das wahrscheinlich etwas mit einer Interaktion zwischen einem der Obertypen von Set und der Unapply -Maschine zu tun hat, die sequenceU funktionieren lassen, und wenn ich ein paar Minuten finden kann, plane ich zu arbeiten durch die Typen und schreibe eine Beschreibung von dem, was vor sich geht.

Es scheint jedoch ein potentiell interessantes kleines Puzzle zu sein, und ich dachte, ich würde es hier posten, falls mich jemand auf eine Antwort schlagen könnte.

    
Travis Brown 31.05.2013, 13:21
quelle

1 Antwort

7

Wow, ja. Hier ist, was ich vermuten kann passiert. Da Set keinen eigenen Applicative hat, erhalten wir stattdessen die applikative Instanz Monoid #:

%Vor%

Da Monoid für Typen von Art * definiert ist und applicative für Typen von Art definiert ist * - & gt; *, weicht die Definition von Applicative in Monoid sorta in einem ignorierten Typparameter mit einem Typ Lambda:

ab %Vor%

Beachten Sie, dass der Typparameter α von λ weggeworfen wird. Wenn also Applicative # point aufgerufen wird, wird Monoid # 0, anstatt dass es ein Monoid [Set [Option [Int]] ist ist ein Monoid [Set [Int]].

larsh weist darauf hin, dass dies den interessanten Nebeneffekt der allowing sequenceU hat, der (ab) als Summe verwendet wird:

%Vor%     
stew 31.05.2013, 13:56
quelle

Tags und Links