Hayoo/Hoogle не сопоставляет мономорфные/менее полиморфные подписи с полиморфными

Я пытаюсь понять, есть ли фундаментальная причина, почему Hoogle и Hayoo не совпадают, например

(b -> c) -> (b' -> c') ->   (b, b') -> (c, c')

to

a b c    -> a b' c'    ->   a (b, b') (c, c')

который имеет тип Control.Arrow.***:

(***) :: a b c -> a b' c' -> a (b, b') (c, c')

— вероятно, это просто что-то, что еще не реализовано, или есть что-то фундаментальное, что мешает когда-либо реализовать такой поиск на основе типов?


person Erik Kaplun    schedule 20.10.2015    source источник
comment
Он соответствует, если вы используете конструктор префиксного кортежа: (,) b c -> (,) b' c' -> (,) (b, b') (c, c').   -  person C. Quilley    schedule 20.10.2015
comment
@C.Quilley: подожди... b -> c совсем не то же самое, что (,) b c — так что ты имеешь в виду? Ваша подпись представляет собой функцию, которая принимает 2 пары и объединяет их в пару пар.   -  person Erik Kaplun    schedule 20.10.2015
comment
... и просто для протокола: даже если вы имели в виду ((->) b c) -> ((->) b' c') -> ((->) (b, b') (c, c')) — о чем я и спрашиваю — это все равно не дает никаких результатов ни на Hayoo, ни на Hoogle.   -  person Erik Kaplun    schedule 20.10.2015
comment
Извините, я совершенно неправильно прочитал ваш пост. Я теперь так же озадачен, как и ты.   -  person C. Quilley    schedule 20.10.2015


Ответы (1)


В случае с Hoogle это, по-видимому, является следствием того, как обрабатывается ->. Ошибка №64 в трекере GitHub, которая очень похожа на то, что мы здесь обсуждаем, включает этот комментарий Нила Митчелла:

В настоящее время я быстро отделяю тип результата от аргументов. Я предполагаю, что одним из подходов было бы найти экземпляры для -> и предварительно сгенерировать версию с заменой ->.

person duplode    schedule 20.10.2015