Чи є різниця між підписами типів a -> b -> a і c -> a -> c?


16

Це питання є теоретичним питанням щодо функцій Haskell, яке може приймати аргументи будь-якого типу. Чи є різниця між способом функціонування з підписами типів

a -> b -> a 

і

c -> a -> c 

є примірниками? Будь-яка допомога вдячна.


6
Ні, ви просто змінили назву змінних типу . Поки ви не перейменовуєте змінну в іншу змінну (таку, що має місце зіткнення імені), проблем немає.
Віллем Ван Онсем

Залежить від того, чи / як змінні типу пов'язані в іншому місці.
Берги

Відповіді:


17

Різниці немає. Оскільки a, bі cпочніть з малих літер , це змінні . Ви можете перейменовувати змінні, і це залишається тим самим, доки дві (або більше) змінних не " зіткнуться ".

Такі зіткнення можуть статися, якщо ви перейменовуєте змінну таку, що вона має те саме ім'я, що й іншу змінну, або коли ви перейменовуєте дві (або більше) змінних в те саме нове ім'я. Якщо ви перейменовували змінну, aнаприклад, bу свій перший фрагмент коду, тоді ми отримаємо b -> b -> b, але це не те саме, оскільки тоді ми застосовуємо, щоб перший і другий параметри були одного типу. В той час, як у вашому підписі ми маємо право вибирати два типи, які можуть бути однаковими, але це не обов’язково.


16

Ні. Думай a -> b -> aяк This Type -> Another Type -> This Type. Тоді вони обидва підходять за заданим малюнком. Однак щось на кшталт a -> b -> cзвичаю: This Type -> That Type -> Yet Another Typeє (загалом) різним; за винятком крайового випадку, коли c = aви отримаєте шаблон, який вас цікавить.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.