Standart Haskell'in bir uzantısı olarak "türler" ile ilgilenebilirsiniz. Çeşitler, tür ve tip kurucular için çok temel bir tip sistemdir. Tür *
, Int
gibi basit bir türüdür. Tür * -> *
, bir tür alır ve bir tür verir, Maybe
gibi bir tür kurucu: bağımsız değişken olarak Int
gibi bir tür geçirin ve Maybe Int
türünü alırsınız.
Bu kodda kullanılan diğer uzantı (ilk önce, girinti kaybolduktan sonra fark etmediğim) ilişkili türlerdir. Standart Haskell'deki bir yazım türü, türün desteklemesi gereken bir dizi işlevi belirleyebilir. İlişkili tiplerle, ek olarak türle ilişkilendirilmiş tipler ve tip kurucular da belirtebilir. Burada
bu Imageable
bir örneğini (yani bir görüntü gibi davranır) bir tip i
ilişkili bir piksel türü Pixel i
olması gerektiği anlamına gelir, ve bu basit bir tür (tür *
), bir tip kurucu olmalıdır.
Kod yazarının bu tasarımı neden kullandığını biliyor musunuz? – osager
Çok fazla seçenek yok. Bir resmi temsil eden türde bir türünüz vardır ve yazım penceresinin görüntüdeki tek bir pikselle ilgilenen işlevlere ihtiyacı vardır. Bu pikselin ne olduğunu öğrenmek için bir yoluna ihtiyacınız var. Düzeltebilirsin, ama bu çok esnek değil. Imageable'i görüntü ve piksele göre çok paramlı bir yazım ölçüsü yapabilirdiniz, ancak sonra işlevsel bağımlılıklara ihtiyacınız var ya da tür belirsizlikler sizi delirtecek ve sınıfa kullanılan her imzadaki piksel türünden bahsedmeniz gerekiyor. İlişkili tipler daha temiz ve daha kolaydır. –