Tindak Lanjut Apa contoh dari Monad yang merupakan Alternatif tetapi bukan MonadPlus? :
Anggap adalah monad. Apa hubungan betweem m menjadi alternatif , sebuah MonadPlusCatch dan MonadPlusDistr ? Untuk masing-masing dari enam pasangan yang mungkin, saya ingin memiliki bukti bahwa satu menyiratkan yang lain, atau contoh tandingan yang tidak.
(Saya menggunakan
MonadPlusCatch untuk membedakan MonadPlus yang memenuhi aturan Left-Catch :
mplus (return a) b = return a
MonadPlusDistr untuk membedakan MonadPlus yang mensahkan aturan Distribusi Kiri :
mplus a b >>= k = mplus (a >>= k) (b >>= k)
lihat MonadPlus di HaskellWiki .)
Pengetahuan + intuisi saya saat ini adalah:
- MonadPlusDist Alternatif -
kemungkinanbenar -sepertinya langsung, saya yakin saya punya sketsa bukti, saya akan memeriksanya dan jika itu benar, saya akan mempostingnyaAndrewC menjawab bagian ini. -
Maybe
MaybeT (Either e)
MaybeT m'
((pure x) <|> g) <*> a = -- LeftCatch (pure x) <*> a -- which in general cannot be equal to ((pure x) <*> a) <|> (g <*> a)
lagi saya akan periksa dan posting. (Menariknya, hanya
Maybe
itu dapat dibuktikan, karena kita dapat menganalisis apakaha
iniJust something
atauNothing
-. Lihat tersebut jawaban AndrewC ini)-
[]
[]
-
[]
-
Maybe
f <$>
tidak melakukan tindakan idiomatik, itu murni, jadi mungkin saja entah bagaimana "beralih sisi".[]
.[]
memuaskan MonadPlusCatch? Saat ini hanya pernyataan di HaskellWiki.>>= k
didefinisikan secara eksplisit menggunakanfoldr ((++).k)
Contoh tandingan untuk MonadPlusCatch→
Memang itu
MaybeT Either
:Outputnya adalah
yang berarti itu
MaybeT Either
gagal hukum distribusi kiriApplicative
.Alasannya adalah itu
mengabaikan
g
(karena LeftCatch ) dan mengevaluasi hanya untuktetapi ini berbeda dari apa yang dinilai pihak lain untuk:
sumber