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.
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.
Yanıtlar:
Fark yok. Yana a
, b
ve c
bir 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 b
ilk 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 .
Hayır! Düşünün a -> b -> a
olarak This Type -> Another Type -> This Type
. Sonra her ikisi de verilen desene uyuyor. Bununla birlikte, a -> b -> c
uygun olmayacak bir şey : This Type -> That Type -> Yet Another Type
(genellikle) farklıdır; c = a
İlgilendiğiniz deseni veren kenar durumu hariç .