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.
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% 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 .)
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.
Tags und Links haskell