Entry tags:
Спрашивали? Отвечаем!
Тут вопрос возник (не в первый раз):
typeof λx.x xОтвечаем, например, так
> :set -XRankNTypes > let f = (\x -> x x) :: (forall a. a -> a) -> (forall a. a -> a) > f id 42 42Или так
> let f' = (\x -> x x) :: (forall a. a) -> (forall a. a) > f' undefined *** Exception: Prelude.undefined
no subject
Проверили (α → α) → (α → α), подошло.
Проверили α → α, подошло.
А мораль какая
?
no subject
Мораль такая, что изящная расстановка кванторов всеобщности, не вытаскиваемых на верхний уровень, даёт возможность типизировать иначе нетипизируёмоё.
no subject
Нетипизируёмоё.
no subject
no subject
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.58.6623
Там правда речь про intersection types, но ниже Пирс ссылается на статью Trevor Jim (1995)
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.18.5455
где показывается, что rank2types и intersection types эквивалентны: в них типизируемы в точности одни и те же термы.
Я всё это довольно поверхностно понимаю, поручил как-то одному студенту разобраться и доложить, но он растворился :(
Мне кажется, хотя возможно я ошибаюсь, для rank2types для заданного терма ещё можно держать под контролем конечный? набор не связанных principal types.
no subject
> The Java Language Specification - Gosling, Joy, et al. - 2000
Ничотак
no subject
no subject
Было нетипизированное - работало.
Добавили типы - сломалось.
Сделали типы всеобщими - опять заработало. Фактически, вернулись в исходную позицию :))
Ну, на самом деле, не в исходную, потому что минимальная конкретика всё-таки возникла: на входе должно быть не что угодно, а функция.
Однако, в нетипизированной лямбде можно написать
А в твоих ответах такой фокус не пройдёт.
no subject
А вот как закодировать self?
no subject
:)
no subject
no subject
Что-то у меня мозги недонастроены на вывод экзистенциальщины. :(