noktayı iletmek.
+
, Num x => x -> x -> x
ürününe sahiptir. Şimdilik sınıf kısıtını göz ardı edelim, ve fonksiyonel tiplerle eşleşip eşleşemeyeceğimizi görelim. Türler x -> x -> x
ve a -> b -> b
olur. Aslına bakarsanız, gerçekte oldukları gibi, ilişkiselliği kullanmadan: x -> (x -> x)
ve a -> (b -> b)
.
->
türünde bir kurucu türüdür. Yani Belirli bir sayı tipini farklı bir türe eşleyen bir işlevdir. Bu durumda ->
kurucu, (->) t_1 t_2
işlevsel türüne iki tip t_1
ve t_2
eşleşir (genellikle t_1 -> t_2
ile gösterilir).
Yani tip x -> (x -> x)
x
ve x
ve x
uygulanan tür kurucusu ->
uygulanan tip yapıcısı ->
olan aslında (->) x ((->) x x)
olduğunu. Diğer türü (->) a ((->) b b)
. Birleştirirken, iki tür için en dıştan tip yapıcıyı düşünün (bu durumda her ikisi için ->
). Bu eşleşmezse, birleştiremezsiniz. Aksi halde kurucunun argümanlarını birleştirmeniz gerekir.
yüzden a
ile x
birleştirmeye gerek. Her ikisi de tür değişkenleridir, bu yüzden yeniden adlandırabiliriz. a
'u x
ile yeniden adlandırdığımızı varsayalım. Şimdi biz elde, türlerine adlandırma geçerlidir: (->) x ((->) x x)
ve (->) x ((->) b b)
ve x
ve x
şimdi maç görüyoruz.
ikinci argüman düşünelim. Bu bir tür değişkeni değil, bu yüzden tür yapıcıyı eşleştirmek zorundayız ve bu da her ikisi için de ->
. Bu yüzden argümanlara tekrar tekrar yolluyoruz. Biz x
ve b
eşleştirmek istiyoruz. Her ikisi de tür değişkenleridir, bu yüzden bunlardan birini yeniden adlandırabiliriz. x
'u b
'a yeniden adlandırdığımızı varsayalım. Bu ikameyi şu türlere uygularız: (->) b ((->) b b)
ve (->) b ((->) b b)
. Şimdi her şey eşleşiyor. Bu nedenle iki tip birleştirir. sınıf kısıtlaması İlişkin
, biz b
ile x
biz kısıtlaması için ikame uygulanan adlandırmak da öyle Num x
Num b
oldu ve son iki tip hem Num b => b -> b -> b
bulunmaktadır.
Bu size türleri çalışmak ve tipleri nasıl kontrol edilir konusunda bazı anlaşıldığını umuyorum.
Yan not: Bu, tür çıkarımını gerçekleştirirken haskell'in yaptığı şeydir. Öncelikle bilinmeyen bir fonksiyona yeni bir değişken t
atar. Daha sonra, onu tanımlayan ifadenin türünü elde etmek için birleştirme kullanır ve t
ile hangi türün ilişkilendirildiğini kontrol eder ve bu, işlevin türüdür.
Sadece a' ve 'Çünkü' O 'a/= b' anlamına gelmez farklı harfler b' vardır. – AJFarmar