SORU
7 AĞUSTOS 2014, PERŞEMBE


Haskell eksik neden "açık" Typeclasses

Nesne Yönelimli Diller göz önünde bulundurun:

Çoğu kişi, nesne yönelimli bir programlama arka plan gelen, Java özü Collection & List arabirimler yakalama çeşitli dillerde ortak ve sezgisel arabirim.Collectionmutlaka doğal/sipariş bir dizin yok olan nesneler topluluğu anlamına gelir. BirListdoğal olan bir toplama/dizin emrediyor. Özet birçok kütüphane benzerleri gibi veri yapıları Java'da, bu arabirimler diğer dillerde arayüzleri, ve bu arabirimler derin bir anlayış en etkili kütüphanesi ile çalışmak için veri yapıları gereklidir.

Haskell geçiş

Haskell nesneleri arabirimleri türleri üzerinde benzer şekilde davranan tip bir sınıf sistemi vardır. Haskell Funktorlar, Uygulamalı, Monadlar, vb açısından well designed type-class hierarchy var gibi görünüyor. ne tür bir işlev görüyor. Belli ki correct and well-abstracted type-classes istiyorum. Henüz baktığınızda birçok Haskell'ın kaplar (List,Map,Sequence,Set,Vector) hemen hemen hepsi çok benzer (veya aynı) işlevleri, henüz değil soyutlanmış üzerinden türü-dersler.

Bazı Örnekler:

  • null Test için"" . emptyness
  • length/Eleman sayısı size
  • elem/Set dahil member
  • emptyve/veyaVarsayılan yapımı için singleton
  • Set Birliği union
  • (\\)/Fark ayarlamak için diff
  • (!)/Güvensiz dizin (kısmi fonksiyonu) (!!)
  • (!?)/Güvenli dizin (toplam fonksiyonu) lookup

Eğer kullanmak istiyorum herhangi bir işlevleri yukarıda, ama ben alınan iki veya daha fazla konteyner var Başlat fonksiyon gizleme dan ithal modülleri, ya da açıkça ithalat sadece gerekli fonksiyonları modülleri, ya da eleme ithal modülleri. Ama tüm fonksiyonları mantıksal aynı işlevselliği sağlamak beri, sadece bir güçlük gibi görünüyor. Eğer bu fonksiyonları ayrı ayrı her modül türü sınıflar ve tanımlanmamış olsaydı, derleyici tür mekanik bu sorunu çözmek olabilir çıkarım. Ayrıca geçiş alttaki kaplar basit tip sınıflar, onlar paylaştığı sürece (örn: sadece kullanın Sequence List yerine daha iyi bir rasgele erişim verimlilik sağlar).

Haskell bir neden yokCollectionve/veyaIndexableve bu bazı fonksiyonları birleştirmek genelleme yapmak türü-sınıfı(es)?

CEVAP
7 AĞUSTOS 2014, PERŞEMBE


lens paketi bu bazı sağlar.

  • Boşluk test, boş kaplar oluşturmaBu iki Control.Lens.Empty AsEmpty typeclass tarafından sağlanır.

  • Anahtar/dizin tarafından öğelere erişme. At Ixed Control.Lens.At typeclasses.

  • Set-gibi kaplarda üyelik için denetleniyor. Control.Lens.At Contains typeclass.

  • Ve sekans gibi kaplar için öğeleri silme ekleme. Cons Snoc Control.Lens.Cons typeclasses.

Ayrıca, Applicative typeclass pure Bu yöntem genellikle oluşturmak için kullanılabilir "singleton" kaplar. Set, Data.Pointed point belki gibi Haskell/applicatives funktorlar, olmayan şeyler kullanılmış olabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HDstarcraft

    HDstarcraft

    12 Mayıs 2009
  • TheForgottenGamer1

    TheForgotten

    28 AĞUSTOS 2009
  • VideoGamePervert

    VideoGamePer

    30 AĞUSTOS 2008