Obligatorisch Maybes im Typsystem

7

Ich habe etwas Ähnliches wie das Folgende

%Vor%

Diese Daten kommen als JSON in meinen Dienst. Diese Anfrage wird nur dann als gültig betrachtet, wenn eine oder mehrere von foo , bar oder baz angegeben sind. Gibt es eine bessere Möglichkeit, dies in Haskells Typsystem auszudrücken?

Hinweis: Leider kann ich diese Anfragen nicht separat machen. Ich folge nur einem definierten Protokoll.

    
Justin Wood 10.08.2015, 13:29
quelle

5 Antworten

11

Ссылка

%Vor%     
leftaroundabout 10.08.2015, 13:36
quelle
4

Wenn es nicht zwingend notwendig ist, drei separate Felder mit foo, bar und baz zu haben, würde ich damit gehen, NonEmpty garantiert, dass es mindestens ein Element gibt, obwohl es natürlich mehr geben kann.

%Vor%     
Markus1189 10.08.2015 14:54
quelle
4

Ich würde eine Map Field String mit data Field = Foo | Bar | Baz verwenden (diese kann bei Bedarf leicht durch String ersetzt werden und dann:

%Vor%

Jetzt ist das Überprüfen der Gültigkeitsbedingung so einfach wie:

%Vor%     
Shoe 10.08.2015 13:34
quelle
2

Erweitern Sie den Vorschlag von ʎǝɹɟɟɟǝs, eine Karte zu verwenden: gibt es auch ein Typ speziell für nicht leere Karten . (Beachten Sie jedoch, dass diese Art von Konflikten mit dem bekannteren Nicht-Leerlisten-Typ kollidiert aus der semigroups -Bibliothek .)

%Vor%     
leftaroundabout 10.08.2015 19:34
quelle
2

Erwägen Sie, für jedes mögliche erforderliche Feld eine Verzweigung anzugeben:

%Vor%

Es ist ein gutes Stück Standard, aber es ist sehr direkt und klar, was erforderlich ist.

    
Daniel Wagner 11.08.2015 07:55
quelle

Tags und Links