2017-02-11 7 views
0

Я в настоящее время обучение Haskell и борется со следующим испытанием: Предположим, у нас есть такой тип:Что такое ассоциативная ассоциация Хэскелла?

type Endo a = a -> a 

я должен выбрать все типы, которые эквивалентны Endo (Endo Int)

(Int -> Int) -> (Int -> Int) 
(Int -> Int) -> Int -> Int 
Int 
Int -> Int 
Int -> Int -> Int -> Int 
(Int -> Int) -> Int 
Int -> Int -> (Int -> Int) 
Int -> (Int -> Int) 
Int -> Int -> Int 

Поскольку тип Endo Int is Int -> Int Я понимаю, что мне нужен тип 4 Ints, такой как (Int -> Int) -> (Int -> Int). Но я не понимаю, какие скобки не нужны

ответ

3

Это право ассоциативная в Haskell, так что следующие условия эквивалентны:

a -> b -> c 
a -> (b -> c) 

Функция, которая принимает аргументы а и Ь эквивалентна функции, которая данного аргумента функция возвращает, которая принимает аргумент б.

Не остается ассоциативным.

Итак, ответ первый два.

0

Ваша интуиция верна: (Int -> Int) -> (Int -> Int) действительно Endo (Endo Int).

Просто напомним, что -> связывает справа, т.е.

a -> b -> c  means a -> (b -> c) 

Учитывая, что теперь вы должны быть в состоянии решить упражнение.

 Смежные вопросы

  • Нет связанных вопросов^_^