Створюючи клієнта для веб-API в C #, я зіткнувся з проблемою, null
якою він вважав би дві різні речі:
- нічого , наприклад,
foo
може бути або не матиbar
- невідомо : за замовчуванням відповідь API включає лише підмножину властивостей, ви повинні вказати, які додаткові властивості ви хочете. Так невідомо означає, що власність не була запитана в API.
Після деяких пошуків я дізнався про тип Можливо (або Варіант), як він використовується у функціональних мовах та як він «вирішує» нульові проблеми з перенаправленням, змушуючи користувача задуматися про можливу відсутність значення. Однак усі ресурси, з якими я стикався, говорили про заміну нуля на Можливо . Я виявив деякі згадки про тризначну логіку , але я не цілком її розумію, і більшість випадків її згадування відбувалося в контексті "це погано".
Мені зараз цікаво, чи є сенс мати і поняття null, і, можливо , представляти невідоме і нічого, відповідно. Це тризначна логіка, про яку я читаю, чи вона має іншу назву? Або призначений спосіб вкласти грі в "А може бути"?
M M x
і M x
повинен мати однакову семантику.
Maybe a
само, як , семантично, те саме, що , і ізоморфне для введення з відповіді @Andej. Ви також можете визначити свій власний екземпляр монади для цього типу, і тому використовувати різні комбінатори монади. a + 1 + 1Maybe Maybe a
UserInput a
M (M x)
і M x
має бути однакова семантика". Візьмемо M = List
для прикладу: списки списків не те саме, що списки. Коли M
монада, є перетворення (а саме монада множення) від M (M x)
до M x
якої пояснює відносини між ними, але вони не мають «таку ж семантику».
null
. Це ретельно зламана ідея.