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