To pytanie teoretyczne dotyczy funkcji Haskella, które mogą przyjmować argumenty dowolnego typu. Czy istnieje różnica między sposobem działania z podpisami typu
a -> b -> a
i
c -> a -> c
są tworzone? Każda pomoc jest mile widziana.
haskell
functional-programming
Dreana
źródło
źródło
Odpowiedzi:
Nie ma różnicy. Ponieważ
a
,b
ic
zacząć od małej litery , są zmienne . Możesz zmieniać nazwy zmiennych, a to pozostaje takie samo, o ile dwie (lub więcej) zmienne nie „ zderzają się ”.Takie starcia mogą się zdarzyć, jeśli zmienisz nazwę zmiennej, tak aby miała taką samą nazwę jak inna zmienna, lub gdy zmienisz nazwę dwóch (lub więcej) zmiennych na tę samą nową nazwę. Jeśli zmienilibyśmy nazwę zmiennej
a
na przykładb
w swoim pierwszym fragmencie kodu, otrzymalibyśmyb -> b -> b
, ale to nie to samo, ponieważ wówczas wymuszamy, aby pierwszy i drugi parametr były tego samego typu. Podczas gdy w twoim podpisie typu mamy swobodę wyboru dwóch typów, które mogą być takie same, ale nie jest to konieczne.źródło
Nie. Pomyśl
a -> b -> a
jakThis Type -> Another Type -> This Type
. Wtedy oba pasują do danego wzoru. Jednak coś takiegoa -> b -> c
nie pasuje:This Type -> That Type -> Yet Another Type
jest (ogólnie) różne; z wyjątkiem przypadku krawędzi, kiedyc = a
, który daje wzór, który Cię interesuje.źródło