Тип уточнения - Refinement type

В теория типов, а тип уточнения[1][2][3] - это тип, наделенный предикатом, который, как предполагается, выполняется для любого элемента уточненного типа. Типы уточнения могут выражать предварительные условия при использовании как аргументы функции или же постусловия при использовании как возвращаемые типы: например, тип функции, которая принимает натуральные числа и возвращает натуральные числа больше 5, может быть записан как . Таким образом, типы уточнений связаны с поведенческий подтип.

История

Концепция типов уточнения была впервые представлена ​​в книге Фримена и Пфеннинга 1991 г. Типы уточнений для ML [1], который представляет систему типов для подмножества Стандартный ML. Система типов «сохраняет разрешимость вывода типа ML», в то же время «позволяя обнаруживать больше ошибок во время компиляции». В последнее время были разработаны системы уточняющих типов для таких языков, как Haskell[4][5], Машинопись[6] и Scala.

Смотрите также

Рекомендации

  1. ^ а б Freeman, T .; Пфеннинг, Ф. (1991). «Типы уточнений для ML» (PDF). Труды конференции ACM по проектированию и реализации языков программирования. С. 268–277. Дои:10.1145/113445.113468.
  2. ^ Хаяси, С. (1993). «Логика видов уточнения». Материалы семинара по типам для доказательств и программ. С. 157–172. CiteSeerX  10.1.1.38.6346. Дои:10.1007/3-540-58085-9_74.
  3. ^ Денни, Э. (1998). «Виды уточнения по спецификации». Труды Международной конференции ИФИП по концепциям и методам программирования. 125. Чепмен и Холл. С. 148–166. CiteSeerX  10.1.1.22.4988.
  4. ^ Вазу, Ники. Liquid Haskell: типы уточнения для Haskell. 45-й симпозиум ACM SIGPLAN по принципам языков программирования (POPL 2018).
  5. ^ Волков, Никита (2015). «Типы уточнения как библиотека Haskell».
  6. ^ Панайотис, Векрис; Косман, Бенджамин; Джала, Ранджит (2016). «Типы уточнения для TypeScript». Труды 37-й конференции ACM SIGPLAN по проектированию и реализации языков программирования. С. 310–325. arXiv:1604.02480. Дои:10.1145/2908080.2908110.