Этот вопрос является теоретическим вопросом о функциях 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
, который дает шаблон, который вас интересует.источник