Beim Erstellen eines Clients für eine Web-API in C # stieß ich auf ein Problem hinsichtlich null
eines Werts, bei dem zwei verschiedene Dinge dargestellt werden:
- nichts , zB ein
foo
darf oder darf nicht a habenbar
- unbekannt : Standardmäßig enthält die API-Antwort nur eine Teilmenge von Eigenschaften. Sie müssen angeben, welche zusätzlichen Eigenschaften Sie möchten. So unbekannt bedeutet , dass die Eigenschaft wurde nicht von der API angefordert.
Nach einigem Suchen fand ich heraus, wie der Typ Vielleicht (oder Option) in funktionalen Sprachen verwendet wird und wie er Null-Dereferenzierungsprobleme "löst", indem er den Benutzer dazu zwingt, über das mögliche Fehlen eines Werts nachzudenken. In allen Ressourcen, auf die ich gestoßen bin, ging es jedoch darum, null durch Vielleicht zu ersetzen . Ich habe einige Erwähnungen von dreiwertiger Logik gefunden , aber ich verstehe sie nicht vollständig und meistens wurde sie im Zusammenhang mit "es ist eine schlechte Sache" erwähnt.
Ich frage mich jetzt, ob es Sinn macht, sowohl das Konzept von null als auch von Maybe zu haben , um Unbekanntes bzw. Nichts darzustellen . Ist das die dreiwertige Logik, über die ich gelesen habe, oder hat sie einen anderen Namen? Oder ist der beabsichtigte Weg, ein Vielleicht in ein Vielleicht zu nisten?
M M x
und M x
sollte die gleiche Semantik haben.
Maybe a
das gleiche ist wie , semantisch, ist das gleiche wie ein + 1 + 1 und isomorph geben von @Andej Antwort. Sie können auch für diesen Typ eine eigene Monadeninstanz definieren und daher verschiedene Monadenkombinatoren verwenden. Maybe Maybe a
UserInput a
M (M x)
und M x
die gleiche Semantik haben sollte". Nehmen wir M = List
zum Beispiel: Listen von Listen sind nicht dasselbe wie Listen. Wenn M
eine Monade ist, gibt es eine Transformation (nämlich die Multiplikation Monade) aus M (M x)
zu M x
dem erklärt die Beziehung zwischen ihnen, aber sie haben nicht „die gleiche Semantik“.
null
. Es ist eine völlig kaputte Idee.