Lors de la création d'un client pour une API Web en C #, j'ai rencontré un problème concernant null
la valeur où cela représenterait deux choses différentes:
- rien , par exemple un
foo
peut ou peut ne pas avoir unbar
- inconnu : par défaut, la réponse de l'API ne comprend qu'un sous-ensemble de propriétés, vous devez indiquer les propriétés supplémentaires que vous souhaitez. Donc inconnu signifie que la propriété n'a pas été demandée à l'API.
Après quelques recherches, j'ai découvert le type Peut-être (ou Option), comment il est utilisé dans les langages fonctionnels et comment il "résout" les problèmes de déréférencement nul en forçant l'utilisateur à réfléchir à l'absence possible d'une valeur. Cependant, toutes les ressources que j'ai rencontrées parlaient de remplacer null par Maybe . J'ai trouvé quelques mentions de la logique à trois valeurs , mais je ne la comprends pas complètement et la plupart du temps, sa mention était dans le contexte de "c'est une mauvaise chose".
Je me demande maintenant s'il est logique d'avoir à la fois le concept de nul et peut - être , pour représenter respectivement inconnu et rien . Est-ce la logique à trois valeurs sur laquelle je lis ou a-t-elle un autre nom? Ou est-ce la manière prévue d'imbriquer un peut-être dans un peut-être?
M M x
et M x
devrait avoir la même sémantique.
Maybe a
c'est la même chose , sémantiquement, c'est la même chose , et isomorphe à taper à partir de la réponse @Andej. Vous pouvez également définir votre propre instance de monade pour ce type et donc utiliser différents combinateurs de monade. Maybe Maybe a
UserInput a
M (M x)
et M x
devrait avoir la même sémantique". Prenez M = List
par exemple: les listes de listes ne sont pas la même chose que les listes. Quand M
est une monade, il y a une transformation (à savoir la multiplication de la monade) à partir M (M x)
de M x
laquelle explique la relation entre elles, mais elles n'ont pas "la même sémantique".
null
. C'est une idée complètement brisée.