SORU
20 HAZİRAN 2010, Pazar


Haskell artık örnekleri

-Wall seçeneği ile Haskell başvurum derleme, DZD örneğin, artık örnekleri hakkında şikayet ediyor:

Publisher.hs:45:9:
    Warning: orphan instance: instance ToSElem Result

ToSElem benim değil, HStringTemplate tarafından tanımlanmış.

Şimdi bu durumu nasıl düzelteceğimi biliyorum (Neden olduğu bildirildi modüle örnek bildirimde hareket), ve why GHC would prefer to avoid orphaned instances, ama yine de benim dediğim daha iyi olduğuna inanıyorum biliyorum. Eğer derleyici beni daha çok rahatsız - umurumda değil.

Yayıncı modülü ToSElem benim örneklerini beyan etmek istiyorum nedeni HStringTemplate, diğer modülleri bağlı olan Yayıncı modülü olmasıdır. Kaygıları bir mesafeyi korumak her modül HStringTemplate bağlıdır zorunda kalmamak için çalışıyorum.

Düşündüğüm bir avantajları Haskell tür sınıflar, zaman göre örneğin Java arabirimleri, ama onlar açık yerine kapalı ve bu nedenle örneklerinin yok olması ilan aynı yere veri türü. DZD tavsiyesi bu görmezden gibi görünüyor.

Benim aradığım şey, benim düşünce ses ve görmezden/bu uyarıyı bastırmak haklı olacağımı bazı doğrulama ya da bu işi benim yöntemimle karşı daha ikna edici bir argüman.

CEVAP
20 HAZİRAN 2010, Pazar


Bunu neden yapmak istediğini, ama ne yazık ki, Haskell sınıfları "" senin söylediğin şekilde. açık gibi görünüyor, bu yalnızca bir yanılsama olabilir anlıyorum Birçok kişi bu iş imkanı bir hata olduğunu aşağıda açıklayacağım nedenlerle Haskell özellikleri hissediyorum. Her neyse, Eğer gerçekten uygun olmadığı için örnek olmalısın ilan ya da modül sınıf ilan veya modül türü olduğunu ilan etti, yani muhtemelen bir işareti olmalısın kullanarak bir newtype veya başka etrafında sarıcı türü.

Yetim örnekleri uzak durmak gerekir neden nedenleri çok daha derin derleyici kolaylık daha çalıştırın. Bu konuya başka cevaplar da görebileceğiniz gibi oldukça tartışmalıdır. Tartışma dengelemek için, deneyimli Haskellers arasında çoğunluğun görüşü olduğunu düşünüyorum bir daha asla, yetim örnekleri yazmalı bu bakış açısını açıklamak için gidiyorum. Benim kendi düşüncem bir yere sonunda açıklayacağım ki ortada.

Sorun birden fazla örneğini beyan aynı sınıfı ve türü var, standart Haskell mekanizma kullanılacak belirtmek için yok olmasından kaynaklanıyor. Bunun yerine, program derleyici tarafından reddedildi.

Bu en basit etkisi birdenbire başka biri çok modül kapalı bazı bağımlılık yapan bir değişiklik nedeniyle derleme Keser Bu mükemmel çalışan bir program olabilir.

Daha da kötüsü, bir çalışma programı başlatmak için mümkün değilzamanı kaybediyoruzçünkü uzak bir değiştirin. Olabilirsin kullanarak bir yöntem olduğunu varsayarak gelir belirli bir örnek beyanname, ve sessizce yerini farklı bir örneği bu sadece farklı yeterli neden programınıza başlamak açıklanamaz çökmesini.

İnsanlar kim ister garanti eden bu sorunlar olmayacak bir şey için onları gerekir kuralına göre eğer herkes, her yerde, her ilan bir örnek, belli bir sınıf için belli bir tür, başka bir örnek olmalı, şimdiye kadar olduğu bildirilen bir daha herhangi bir program yazan herkes. Tabii ki, yeni bir örneğini bildirmek için newtype kullanarak geçici çözüm vardır, ama her zaman en azından küçük bir rahatsızlık ve büyük bir şirket bazen. Bu anlamda, yetim örneklerini yazanlar kasten yerine kabalık ediliyor.

Bu sorun hakkında ne yapılabilir? Anti-yetim-örnek kamp DZD uyarı bir hata değildir, yetim bir örneğini bildirmek için her türlü girişimi reddeden bir hata olmalı diyor. Bu arada, öz-disiplin egzersiz ve her ne pahasına onları kaçınmak gerekir.

Görüldüğü gibi, bu potansiyel sorunlar hakkında endişeli olmayanlar var. Aslında teşvik kullanımı yetim örnekleri gibi bir araç için ayrılık kaygıları olarak önermek ve söylemek gerekir sadece bir vaka-by-case olarak böyle bir sorun yok. Diğer insanların yetim örnekleri tarafından yeteri kadar bu tutum fazla laubali olduğuna ikna olmak için rahatsız oldum.

Doğru çözüm örneklerinin ithalat kontrol edeceğini Haskell alma mekanizmasının bir uzantısı eklemek olacağını düşünüyorum. Sorunları tamamen çözmek değil, ama dünyada zaten yetim örnekleri zararlara karşı programlarımız korumaya yönelik bazı yardım verecek. Ve sonra, zamanla, bazı sınırlı durumlarda, belki de yetim bir örnek, o kadar da kötü olmayabilir ikna olabilirim. (Ve bu çok günaha anti-yetim-örnek kamp bazı teklifime karşı nedenidir.)

Tüm bunlardan vardığım sonuç, en azından şimdilik, herhangi bir yetim örneklerini bildirmek, eğer başka bir nedeni yoksa başkalarına saygılı olmak kaçınmanız şiddetle öneririm. newtype kullanın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Manuel Vizcaino

    Manuel Vizca

    27 Mayıs 2008
  • Orson Wang

    Orson Wang

    28 EKİM 2006
  • wowchick16

    wowchick16

    17 Mart 2007