/Functor/Uygulamalı/Monad bir Functor iyi örnekler?
Sınıf X ne birine anlatırken ben tam olarak X olan veri yapılarını iyi örnekler bulmak için mücadele
Yani, örnek olarak rica ediyorum:
- Bir türü olan yapıcı bir Functor değildir.
- Bir türü olan yapıcı bir Functor, ama Uygulanabilir.
- Bir türü olan yapıcı bir Uygulamalı, ama bir Monad değildir.
- Bir türü olan yapıcı bir Monad.
Monad bol örnekler her yerde var, ama önceki örnekler bazı ilişkisi olan Monad iyi bir örnek resmi tamamlamak.
Birbirleriyle benzer yönleri belirli tür bir sınıfa ait için önemli tek farklı olan örnekler için bak.
Eğer bu hiyerarşide OK Bir yerde bir örnek (arasında Uygulamalı ve Monad?) gizlice yönetmek diye bu harika olurdu!
CEVAP
Bir türü olan yapıcı bir Functor değildir:
newtype T a = T (a -> Int)
Bir cofunctor ama bir functor değil yapabilirsiniz. fmap
yazmayı deneyin ve başarısız olursun. Cofunctor sürümünü ters olduğunu unutmayın:
fmap :: Functor f => (a -> b) -> f a -> f b
cofmap :: Cofunctor f => (a -> b) -> f b -> f a
Bir türü olan yapıcı bir functor, ama Uygulanabilir:
İyi bir örnek yok. Const
, ama ideal bir somut olmayan Monoid istiyorum ve herhangi düşünemiyorum. Her türlü temel olarak sayısal, Listeleme, ürünleri, toplar, ya da o noktaya geldiğinde işlevleri vardır. Data.Void
olup olmadığı hakkında pigworker ve ben aşağıda belirtmiş Monoid
; görebilirsiniz
instance Monoid Data.Void where
mempty = undefined
mappend _ _ = undefined
mconcat _ = undefined
_|_
Haskell, ve aslında Data.Void
, sadece yasal değeri geçerli bir değer olduğundan bu Monoid kurallara uygundur. unsafeCoerce
program artık Haskell semantik araçları garanti değil çünkü başka yapacak unsafe
herhangi bir işlevi kullanmaya başladığınızda ne emin değilim.
Ya da güvenli olmayan fonksiyonları altında bir makale (link) için Haskell Wiki (link).
Eğer bu tür bir yapıcı daha zengin tip bir sistem, çeşitli uzantıları ile Agda veya Haskell gibi kullanarak oluşturmak mümkün olup olmadığını merak ediyorum.
Bir türü olan yapıcı bir Uygulamalı, ama bir Monad değil
newtype T a = T {multidimensional array of a}
Gibi bir şey ile bir Uygulamalı yapabilirsiniz:
mkarray [( 10), ( 100), id] <*> mkarray [1, 2]
== mkarray [[11, 101, 1], [12, 102, 2]]
Eğer bir monad yaparsanız, boyut uyuşmazlığı alabilir. Bu gibi örnekler, pratikte nadir olduğunu düşünüyorum.
Bir türü olan yapıcı bir Monad
[]
Hakkında Ok:
Bir Ok bu hiyerarşi yatan soran nasıl bir şekil "" dir. kırmızı sormak gibidir Tür uyuşmazlığı not:
Functor :: * -> *
Applicative :: * -> *
Monad :: * -> *
ama,
Arrow :: * -> * -> *
Fonksiyonel programlamada, bir functor...
"Monad transformers etkileri"...
Nerede upshot.js örnekler ve belgeler ...
Okuyucu Bağımlılık Enjeksiyon için Mon...
Bir monad nedir?...