't ilgili bir monad transformer (IO hariç) yok böyle bir monad var mı?
Şimdiye kadar karşılaştığım her monad (bir veri türü olarak gösterilebilir) ilgili monad bir trafo vardı, ya da biri olabilir. Olabilir mi böyle bir monad var mı? Yatüm monadlar ilgili bir trafo var mı?
Bir tarafındant
ilgili m
monad için trafot Identity
m
dönmesidir. Ve monad transformer kurallarını karşılayan ve t n
herhangi bir monad monad olduğunu elbette 5**.
Her monad ya da bir (kanıt) yok belirli bir monad bir örnek vardır, bu da bir kanıt görmek istiyorum (ideal bir yapıcı bir). Haskell odaklı cevap olarak (kategori) teorik olanlar hem daha çok ilgileniyorum.
Bir takip soru üzerine, iki ayrı transformatörleri t1
t2
olan bir monad m
var mı? Bu, t1 Identity
m
t2 Identity
ve izomorfik ama t1 n
n
t2 n
izomorfik olmayan bir monad yoktur.
(IO
ST
dikkate al ve onları tamamen göz ardı etmesine izin vermem çok özel bir mantığı vardır. Sadece "saf" inşa edilebilir monadlar veri türleri kullanarak.) odaklanalım
CEVAP
@Bu Rhymoid katılıyorum, tüm Monadlar iki inanıyorum (!!) transformers. Benim yapım biraz farklı, ve çok daha tamamlandı. Bir kanıt bu çizim yapabilmek isterdim, ama sezgi ve beceri kaçırıyorum ya da çok ilgili olduğunu düşünüyorum.
Nedeniyle Kelisli, her monad (m
) çürümüş iki funktor F_k
G_k
F_k
sol eşlenik için G_k
m
izomorfik G_k * F_k
(*
functor kompozisyon). Ayrıca, adjunction nedeniyle, F_k * G_k
bir comonad oluşturur.
t_mk
t_mk n = G_k * n * F_k
monad bir trafo gibi tanımlanmış iddia ediyorum. Açıkça, t_mk Id = G_k * Id * F_k = G_k * F_k = m
. Tanımlama return
Bu functor zor değil beri F_k
bir "işaret" functor ve tanımlama join
olması mümkün beri extract
comonad F_k * G_k
kullanılabilir azaltmak için değerleri yazın (t_mk n * t_mk n) a = (G_k * n * F_k * G_k * n * F_k) a
değer türü G_k * n * n * F_k
daha sonra daha da azaltır) join
n
.
Biraz F_k
beri dikkatli olmamız gerekiyor ve G_k
Hask üzerinde endofunctors değildir. Yani Functor
standart typeclass örneklerini değil, aynı zamanda yukarıda gösterildiği gibi n
ile doğrudan birleştirilebilir. Biz bunun yerine "" 42* *kompozisyon önce Kleisli kategori içine, ama m
return
bunu sağlar inanıyorum"". projeksiyon proje
İnanıyorum ki sen-ebilmek da yapmak bu Eilenberg-Moore monad bozunma veren m = G_em * F_em
, tm_em n = G_em * n * F_em
ve benzer yapılar için lift
, return
join
ile benzer bir bağımlılık extract
comonad F_em * G_em
.
Hiç vahşi bir Monad Transformer karşıl...
Scalaz devlet monad örnekleri...
Nasıl ve neden Haskell monad çalışma D...
Endeksli monad nedir?...
"Monad transformers etkileri"...