Saat membuat klien untuk API web di C #, saya mengalami masalah terkait nulldengan nilai yang mewakili dua hal yang berbeda:
- tidak ada , mis.
foomungkin atau mungkin tidakbar - tidak diketahui : secara default respons API hanya mencakup subset properti, Anda harus menunjukkan properti tambahan yang Anda inginkan. Jadi tidak diketahui berarti bahwa properti itu tidak diminta dari API.
Setelah beberapa pencarian saya menemukan tentang jenis Maybe (atau Option), bagaimana ini digunakan dalam bahasa fungsional dan bagaimana "memecahkan" masalah null dereferencing dengan memaksa pengguna untuk berpikir tentang kemungkinan tidak adanya nilai. Namun, semua sumber yang saya temui berbicara tentang mengganti null dengan Maybe . Saya memang menemukan beberapa menyebutkan logika bernilai tiga , tapi saya tidak sepenuhnya memahaminya dan sebagian besar menyebutkannya dalam konteks "itu hal yang buruk".
Saya sekarang bertanya-tanya apakah masuk akal untuk memiliki konsep null dan Maybe , masing-masing untuk mewakili yang tidak diketahui dan tidak sama sekali . Apakah ini logika tiga nilai yang saya baca, atau apakah itu memiliki nama lain? Atau apakah cara yang dimaksudkan untuk bersarang dalam Maybe in a Maybe?
M M xdan M xharus memiliki semantik yang sama.
Maybe asama dengan , secara semantik, sama dengan , dan isomorfik untuk mengetik dari jawaban @Andej. Anda dapat mendefinisikan turunan monad Anda sendiri untuk jenis ini juga dan karenanya menggunakan kombinator monad yang berbeda. a + 1 + 1Maybe Maybe aUserInput a
M (M x)dan M xharus memiliki semantik yang sama". Ambil M = Listcontoh: daftar daftar tidak sama dengan daftar. Ketika Madalah monad, ada transformasi (yaitu monad perkalian) dari M (M x)ke M xyang menjelaskan hubungan antara mereka, tetapi mereka tidak memiliki "semantik yang sama".
null. Itu adalah ide yang benar-benar rusak.