Це питання є теоретичним питанням щодо функцій Haskell, яке може приймати аргументи будь-якого типу. Чи є різниця між способом функціонування з підписами типів
a -> b -> a
і
c -> a -> c
є примірниками? Будь-яка допомога вдячна.
Це питання є теоретичним питанням щодо функцій Haskell, яке може приймати аргументи будь-якого типу. Чи є різниця між способом функціонування з підписами типів
a -> b -> a
і
c -> a -> c
є примірниками? Будь-яка допомога вдячна.
Відповіді:
Різниці немає. Оскільки a
, b
і c
почніть з малих літер , це змінні . Ви можете перейменовувати змінні, і це залишається тим самим, доки дві (або більше) змінних не " зіткнуться ".
Такі зіткнення можуть статися, якщо ви перейменовуєте змінну таку, що вона має те саме ім'я, що й іншу змінну, або коли ви перейменовуєте дві (або більше) змінних в те саме нове ім'я. Якщо ви перейменовували змінну, a
наприклад, b
у свій перший фрагмент коду, тоді ми отримаємо b -> b -> b
, але це не те саме, оскільки тоді ми застосовуємо, щоб перший і другий параметри були одного типу. В той час, як у вашому підписі ми маємо право вибирати два типи, які можуть бути однаковими, але це не обов’язково.
Ні. Думай a -> b -> a
як This Type -> Another Type -> This Type
. Тоді вони обидва підходять за заданим малюнком. Однак щось на кшталт a -> b -> c
звичаю: This Type -> That Type -> Yet Another Type
є (загалом) різним; за винятком крайового випадку, коли c = a
ви отримаєте шаблон, який вас цікавить.