A -> b -> a ve c -> a -> c tip imzaları arasında bir fark var mı?


16

Bu soru Haskell fonksiyonları ile ilgili her türlü argümanı alabilen teorik bir sorudur. İşlevin tür imzalarıyla işlevler arasında bir fark var mı?

a -> b -> a 

ve

c -> a -> c 

somutlaştırılıyor mu? Herhangi bir yardım takdir.


6
Hayır, tür değişkenlerinin adını değiştirdiniz . Bir değişkeni başka bir değişkenle yeniden adlandırmadığınız sürece (bir ad çakışması olduğu gibi), sorun yoktur.
Willem Van Onsem

Tür değişkenlerinin başka bir yere bağlı olup olmamasına / nasıl bağlı olduğuna bağlıdır.
Bergi

Yanıtlar:


17

Fark yok. Yana a, bve cbir ile başlamak küçük harf , bunlar değişkenlerin . Değişkenleri yeniden adlandırabilirsiniz ve iki (veya daha fazla) değişken " çakışmadığı " sürece bu aynı kalır .

Bu tür çakışmalar, bir değişkeni başka bir değişkenle aynı ada sahip olacak şekilde yeniden adlandırırsanız veya iki (veya daha fazla) değişkeni aynı yeni adla yeniden adlandırdığınızda oluşabilir. Değişkeni aörneğin bilk kod parçanızda yeniden adlandırırsanız , o zaman alacağız b -> b -> b, ancak bu aynı değil, çünkü o zaman ilk ve ikinci parametrenin aynı tipte olmasını zorunlu kılıyoruz. Oysa tip imzanızda, aynı olabilecek iki tür seçme özgürlüğüne sahibiz, ancak bu gerekli değildir .


16

Hayır! Düşünün a -> b -> aolarak This Type -> Another Type -> This Type. Sonra her ikisi de verilen desene uyuyor. Bununla birlikte, a -> b -> cuygun olmayacak bir şey : This Type -> That Type -> Yet Another Type(genellikle) farklıdır; c = aİlgilendiğiniz deseni veren kenar durumu hariç .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.