2014-03-16 3 views
3

В Haskell, тип (.) функции:функция типа композиции умозаключение в Haskell

(.) :: (b -> c) -> (a -> b) -> a -> c 

И тип (.) (.) является:

(.) (.) :: (a -> b -> c) -> a -> (a1 -> b) -> a1 -> c 

Я не в состоянии вывести результат, как это сделано?

+2

Признайтесь, вы просто хотели написать '(.) (.)' On SO – luqui

+1

@luqui У вас это получилось! : D –

ответ

3
(.) :: (b -> c) -> (a -> b) -> a -> c 

Давайте пройдем через него. Первое, что выполняет эта функция, - (b -> c) (поэтому функция от b до c), круто. Добавив пару (избыточно) круглые скобки:

(.) :: (b -> c) -> ((a -> b) -> a -> c) 
     ^-- I am b' ^-- I am c' -- (b' and c' not to have name clash) 

Это первая часть, мы дали функцию (т.е. было позаботились о):

(.) (.) :: (a -> b') -> a -> c' 
-- after substituting stuff (b' and c') 
(.) (.) :: (a -> (b -> c)) -> a -> ((a1 -> b) -> a1 -> c) 
            ^-- of course a1 /= a 
-- you could eliminate redundant parentheses 
(.) (.) :: (a -> b -> c) -> a -> (a1 -> b) -> a1 -> c 
-- wee 

Я надеюсь, что это решает дело. Главное: вывод типа легко «получить», и как только вы получите, это просто вопрос замены того, что ghci автоматически обнаруживает. ot: мы могли бы назвать этого опрометчивого оператора boobs.

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