SORU
28 AĞUSTOS 2011, Pazar


/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
28 AĞUSTOS 2011, Pazar


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 :: * -> * -> *

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alexander Johnson

    Alexander Jo

    26 Temmuz 2008
  • Blue Lightning TV

    Blue Lightni

    9 EKİM 2011
  • xiaoyu85

    xiaoyu85

    20 ŞUBAT 2010