type family Rep a
ve
type family Rep :: * -> *
bekliyoruz, ancak
type family Rep a
type instance Rep Int = Char
-- ok
type family Rep :: * -> *
type instance Rep Int = Char
-- Expected kind * -> *, but got 'Int' instead
Sadece bir sendeledi mı bir fark var gibi görünüyor
Haskell uzantısı böcek, ya da bu davranışa bir nokta var mı?
Buradaki nokta, tür aileler 'tip düzey işlevler' değildir. Onlar 'tip aileler'. Değer düzeyli desen eşleştirmesi ile tip aile örneği bildirimleri arasındaki sözdizimsel benzerlikleri bir rastlantı olarak görmelisiniz - ikisi birbirinden tamamen farklı anlamlara sahiptir (örn. Kurucuda eşleştirilen değer düzeyi işlevini yazmayı deneyin Sol - a -> Ya ab '). Farkın asgari bir örneğine zaten şahit oldunuz. 2. tip aile, sadece tek bir örneğe sahip olabileceğinden, temel olarak sadece bir tür eşanlamlıdır. 1, uygun tipte bir ailedir. – user2407038
Keşke “tip-seviye fonksiyon” ile “tip ailesi” arasındaki farkı açıklamanın basit bir yolunu bulsaydım ama yapmam. Bu fark, 1. tip ailenin kısmen uygulanamayacağı gerçeğini ortaya çıkarmaktadır (ikinci aşamada elbette 2, ancak 2. argümanın kullanılması, 0 argümanı aldığından, doymuş bir uygulamadır) - diğer bir deyişle 1. tip Aile, Haskell tipi sistemde kendisine tahsis edilebilecek bir türe sahip değildir. – user2407038