Haskell's type checker çok yanlış türde bir değişimi sağlayan ve program hala derler
Benim programda bir sorun (eşit bir yarıçap ile 2 daireler farklı boyutlarda Parlak kullanarak çiziliyor) debug etmeye çalışırken, garip bir durum çıktı karşıma. Dosyamda bu nesneleri işleme, Player
için aşağıdaki tanım var:
type Coord = (Float,Float)
data Obj = Player { oPos :: Coord, oDims :: Coord }
Nesneleri ithal eden ve benim ana dosya.hs, aşağıdaki tanım var:
startPlayer :: Obj
startPlayer = Player (0,0) 10
Bu olay nedeniyle bana ekleme ve değiştirme alanları için oyuncu ve unutmak için güncelleme startPlayer
sonra (boyutları olduğunu tespit ederek tek bir sayıyı temsil yarıçapı, ama değiştirdim bir Coord
temsil (genişlik,yükseklik); diye yapacağım oyuncu nesnesi olmayan bir daire).
Şaşırtıcı şey, yukarıdaki kodu derler ve, yanlış türde ikinci bir alan olmasına rağmen çalışır.
Ben ilk belki de dosyaları açmak farklı sürümleri olduğunu düşündüm, ama herhangi bir dosya herhangi bir değişiklik derlenmiş program da yansıdı.
Belki seneye startPlayer
nedense kullanılmamış olduğunu düşünmüştüm. Yorum oluşturma startPlayer
verimleri bir derleyici hata olsa bile yabancı, değişen 10
startPlayer
neden uygun bir yanıt (değişiklikler başlangıç boyutu Player
); yine, rağmen olmanın yanlış yazın. Veri tanımı okuma, emin olmak için doğru dosyaya bir yazım hatası yerleştirdim ve bana bir hata verdi; doğru dosya bakıyorum.
2 parçacıkları yapıştırma yukarıda kendi dosyasına çalıştım ama başaramadım startPlayer
12 *ikinci alan yanlış olduğunu beklenen hata tükürdü.
Muhtemelen bu izin ne olabilir? Bu Haskell tür denetleyicisi önlemek gereken çok şey olduğunu düşünmek istiyorum.
CEVAP
Bu muhtemelen derlemek için tek yol varsa Num (Float,Float)
bir örnek varsa orada. Bu kullandığınız kütüphaneler biri gereksiz yere eklenen, mümkün olsa da standart kütüphane tarafından sağlanan değil. Ghci proje yükleme deneyin ve eğer 10 :: (Float,Float)
çalıştığını görmek, :i Num
örnek gelen ve tanımlanmış kim bağırma nerede olduğunu bulmaya çalışın.
Ek: örnekler kapatmak için bir yol Yoktur. Hatta bir yolu yokdeğilbir modülden onları ihracat. Eğer bu mümkün olsaydı, hatta ona neden olacaktırdaha fazlakafa karıştırıcı kod. Tek gerçek çözüm burada, bu gibi durumlarda değil tanımlamaktır.
Derleyici/daha hızlı bir program yapma...
Nasıl ViewPager içinde parmak ile kayd...
boş modeli ile renderpartial yanlış tü...
Nasıl hala runhaskell/ile çalışan kütü...
&Quot için iki sınıf sağlayan bir prog...