So teilen Sie F [A \ / B] in (F [A], F [B])

8

Ich habe gelegentlich Code wie folgt gedrückt:

%Vor%

oder in meinem aktuellen Fall möchte ich Map[A, B \/ C] => (Map[A, B], Map[A, C])

Gibt es eine schöne Möglichkeit, dies im allgemeinen Fall F[A \/ B] mit entsprechenden Einschränkungen für F zu tun? Es sieht vage wie eine Variation des Themas Unzip aus.

    
AlecZorab 29.05.2013, 14:24
quelle

3 Antworten

9

So behandeln wir das für / aber auch Entweder und Validierung und nicht nur für Listen, sondern auch für andere Faltbare.

%Vor%     
stew 29.05.2013, 14:54
quelle
2

Sie können things in einer Liste von (Option[A], Option[B]) zuordnen, diese Liste in zwei Listen entzippen und dann die resultierenden Listen zusammenführen:

%Vor%

Dies ist nicht besonders effizient, da die Liste dreimal durchlaufen wird.

    
mpilquist 29.05.2013 14:44
quelle
1

Hier ist ein Weg (für Listen):

%Vor%

Und für eine Karte:

%Vor%

Es fällt mir schwer, eine Möglichkeit zu finden, dies über F zu verallgemeinern (ich glaube, Sie würden Instanzen von Monoid und Applicative für F benötigen).

    
pkaeding 29.05.2013 15:47
quelle

Tags und Links