2010-07-17 18 views
29

Biraz kafam karıştı ve beni düzeltmek için birine ihtiyacım var. benim şimdiki anlayış hatlarıyla sağlar:Haskell functors endofunctors'ın tümü var mı?

E bir endofunctor olan

ve A bazı kategoridir:

E : A -> A. 

Haskell tüm türleri ve morfizimler Hask kategorisinde olduğundan, Haskell herhangi funktor değil ayrıca bir endofunctor? F : Hask -> Hask.

Yanlış olduğumu ve bu şekilde aşırı basitleştirdiğimi iyi hissediyorum, ve birisinin bana ne kadar aptalım olduğunu söylemesini istiyorum. Teşekkürler.

+0

"Nerede E" ... den önce eksik kelime var mı? – kennytm

cevap

33

"Haskell'de" veya "Functor" nu sorup sormadığınızı açıklığa kavuşturmak isteyebilirsiniz. Kategori Teori terimleri Haskell'de kullanıldığında hangi kategorinin varsayıldığı her zaman açık değildir. Evet, varsayılan varsayım, morfizma olarak işlev gören Haskell tipleri kategorisi olarak alınan Hask'dur. Bu durumda, Hask no'lu bir endofuntör F, F (A) tipi herhangi bir tip ve herhangi bir F tipi (A) ve (A) arasındaki iki fonksiyon arasında F (f) F (A) tipi herhangi bir fonksiyon için F (A) tipi herhangi bir fonksiyonu eşler.) ve F (B). O zaman f tür * -> * ile bir tür yapıcı bir tip (f a) için her türlü a map sadece bu endofunctors kendimizi sınırlamak durumunda

, o zaman tip (a -> b) -> (f a -> f b) ile daha yüksek dereceden fonksiyonu olarak işlevler için ilişkili harita tanımlayabilir Tabii ki, Functor olarak adlandırılan tip sınıftır.

Ancak kolayca böyle Either a t için bir tür a koyan bir functor olarak Functor, bir örneği olarak (doğrudan) için yazılı olamaz HASK uslu endofunctors hayal edebilirsiniz. Bir functor fazla bir anlamı tamamen başka kategoriye HASK belli ki orada değil ederken, bu op Haskiçin HASK bir (kontravaryant) functor dikkate almak mantıklı. Bunun ötesinde

, Functor örnekleri mutlaka böylece aynı zamanda bir kategori oluşturan bunun gibi bir kısmını üzerine tüm kategori Hask dan map. Ama aynı zamanda Hask alt kümeleri arasında numaralı funkörler hakkında konuşmak da mantıklı. Örneğin, Maybe a türlerini [a]'a gönderen bir joker düşünün.

Sen HASK yerine bunun tamamını varsayarak içinde gömülü bazı Kategori Teorisi esinlenen yapılar sağlar category-extras package, incelemek isteyebilir.Hatta sonuçta eğer

http://www.cs.nott.ac.uk/~txa/publ/Relative_Monads.pdf

+7

Bu biraz bir teğet, ama ben benim anlayışımı kontrol etmek istedim: Belki bir a [a] dan bir haritalama bir kaç yoldan düşünülebilir: (a) Belki ve [] formu alt bir functor -Hask kategorileri. (b) Belki ve [] Hask'ta endofüntörleri oluşturan doğal bir dönüşüm. (c) Hask kategorisinde bir morfizma ailesi, belki de Obj (Hask) 'da a a a a a a a. Bu doğru mu? –

+0

Ek: (a) ve (b), elbette, sırasıyla, traktörlerin ve doğal dönüşümlerin yasalarını tatmin eden haritalamaya bağlıdır. Functor yasaları (a) için tatmin edilirse, o zaman aynı haritalama (b), ve tersi olarak görülebilir söylemek doğru mu? –

+0

@ Tom: Ben ... öyle düşünüyorum? Bana doğru geliyor. Aslında, forall a. Belki bir -> [a] '* doğal bir dönüşüm olmalıdır. Data.Maybe içinde 'belkiToList', örneğin, bahsettiğiniz her şey (ya da yeterince açıklayan), inanıyorum, ama Kategori Teorisi kendi anlayışım oldukça sınırlıdır, bu yüzden onu gospel olarak almayın ... –

7

bir olasılıkla ilgiliolduğunu

  • Hask^op: el sorunu için anlamlı olabilir Hask üzerine inşa edilebilir diğer kategorilere sürü Tüm oklarlaüzerine fanktorlar bifunctors
  • Virgül kategorileri, yani vardır,
  • Hask * Hask
  • tersine çevirdi. nesneleri sabit bir nesneye a için morfizimler olan morfizma değişmeli üçgenler
  • Funktör kategorileri, morfizma doğal dönüşümler
  • Cebri kategorileri
  • Monoidal kategorileri
  • Kleisli kategorileri
  • ... olan

Mac Lane'in bir kopyasını alın Çalışma matematikçisi kategorileri tanımları var ve Haskell'de çözdükleri problemi kendiniz bulmaya çalışın. Özellikle, eşlenikli jokeyleri (doğru kategorideki başlangıç ​​/ terminal nesneleri) ve monadlarla ilişkilerini kısaltın.

Göreceksin

böyle olmayan katılık olarak Haskell dili seçimler kapsüller tek bir büyük kategori (Hask, ya da belki de "sağ oklar/products/... ile Hask kaldırıldığı nesneleri", olsa bile o ve lazyness), uygun türetilmiş kategoriler ifade eder.

+2

, standart Kategori Teorisi anlamda monads gerçekten, endofunctors olarak tanımlanır ** HASK çok invaziv kartezyen-kapalı yapısı **. –

13

, sen Hask manipüle bir vardır: (en azından ilginç veya) tartışma özellikle "monads endofunctors olması gerekmez" kağıt bulunan monads ilişkin

+0

Çok teşekkürler. Kitabı kontrol edebilirim. o örneklerle ilgili olarak oldukça kısa ve öz olduğu için, bir _purpose_ (fonksiyonel programlama veya cebirsel geometri, ya da her neyse ya) ile bu kitabı okumalı uyardı –

+9

ve her nasılsa _yours_ vermeleri gerekmektedir. Yani birlikte, çok çeşitli ufuklar bilim adamları tarafından kullanılan inanılmaz esnek bir kitap yapar. –