Почему тип f (fbc) (f (fab) (fac)) не соответствует (.)? - PullRequest
0 голосов
/ 25 августа 2018

Я только что сформулировал тип (.), обобщенный, насколько я могу судить, однако, набрав его в Hoogle , я не получил результатов.

I 'я ожидал, что

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

будет соответствовать

thistype ~ f (f b c) (f (f a b) (f a c))

1 Ответ

0 голосов
/ 26 августа 2018

Технический ответ заключается в том, что Hoogle разбивает поиск на аргументы и возвращает типы на внешних (->) деталях, а затем ищет каждую часть в отдельности, прежде чем объединять результаты. К внешнему (->) обращаются очень особым образом, в частности, он рад переупорядочивать аргументы.

Более фундаментальная причина, по которой Hoogle работает таким образом, заключается в том, что это поисковая система, а не система объединения. Если бы вы искали вышесказанное и вернулись (.), это ответило бы на ваш вопрос? Мое предположение, вероятно, нет. Мой любимый пример - поиск "a -> [(a,b)] -> b" должен вернуть lookup, даже если он не объединяется.

...