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