Spec-Zone.ru › Haskell 8

10. Возможности языка GHC

  • 10.1. Параметры языка
  • 10.2. Неупакованные типы и примитивные операции
    • 10.2.1. Неупакованные типы
    • 10.2.2. Виды неупакованных типов
    • 10.2.3. Неупакованные кортежи
    • 10.2.4. Неупакованные суммы
    • 10.2.5. Неподнятые Newtypes
  • 10.3. Синтаксические расширения
    • 10.3.1. Синтаксис Юникода
    • 10.3.2. Магический хэш
    • 10.3.3. Отрицательные литералы
    • 10.3.4. Целые литералы, похожие на дробные
    • 10.3.5. Двоичные целые литералы
    • 10.3.6. Шестнадцатеричные литералы с плавающей точкой
    • 10.3.7. Подчеркивания в числовых литералах
    • 10.3.8. Защиты шаблонов
    • 10.3.9. Шаблоны представлений
    • 10.3.10. Шаблоны n+k
    • 10.3.11. Рекурсивный do-оператор
      • 10.3.11.1. Рекурсивные группы связываний
      • 10.3.11.2. Оператор mdo
    • 10.3.12. Прикладной do-оператор
      • 10.3.12.1. Жесткие шаблоны
      • 10.3.12.2. На что следует обратить внимание
    • 10.3.13. Параллельные списочные включения
    • 10.3.14. Обобщенные (похожие на SQL) списочные включения
    • 10.3.15. Включения монады
    • 10.3.16. Новый механизм дезугаризации монодического отказа
    • 10.3.17. Перепривязываемый синтаксис и неявный импорт Prelude
      • 10.3.17.1. Элементы, не затронутые RebindableSyntax
    • 10.3.18. Постфиксные операторы
    • 10.3.19. Разделы кортежей
    • 10.3.20. Lambda-case
    • 10.3.21. Пустые альтернативы case
    • 10.3.22. Многосторонние выражения if
    • 10.3.23. Локальные объявления фиктивности
    • 10.3.24. Расширения импорта и экспорта
      • 10.3.24.1. Скрытие элементов, которые не экспортирует импортируемый модуль
      • 10.3.24.2. Импорты с квалификацией пакета
      • 10.3.24.3. Безопасные импорты
      • 10.3.24.4. Явные пространства имен в импорте/экспорте
      • 10.3.24.5. Запись qualified в постпозитивном положении
    • 10.3.25. Более либеральный синтаксис для аргументов функций
      • 10.3.25.1. Изменения в грамматике
    • 10.3.26. Резюме по похищенному синтаксису
  • 10.4. Расширения типов данных и синонимов типов
    • 10.4.1. Типы данных без конструкторов
    • 10.4.2. Контексты типов данных
    • 10.4.3. Инфиксные конструкторы типов, классы и переменные типов
    • 10.4.4. Операторы типов
    • 10.4.5. Либерализованные синонимы типов
    • 10.4.6. Существующие квантифицированные конструкторы данных
      • 10.4.6.1. Почему сущностные?
      • 10.4.6.2. Сущностные и классы типов
      • 10.4.6.3. Конструкторы записей
      • 10.4.6.4. Ограничения
    • 10.4.7. Объявление типов данных с явными подписями конструкторов
    • 10.4.8. Обобщенные алгебраические типы данных (GADTs)
  • 10.5. Расширения системы записей
    • 10.5.1. Традиционный синтаксис записей
    • 10.5.2. Разъяснение полей записи
    • 10.5.3. Повторяющиеся поля записи
      • 10.5.3.1. Функции-селекторы
      • 10.5.3.2. Обновления записей
      • 10.5.3.3. Импорт и экспорт полей записи
    • 10.5.4. Игры со записями
    • 10.5.5. Драйверы записей
    • 10.5.6. Полиморфизм селекторов полей записей
      • 10.5.6.1. Решение ограничений HasField
      • 10.5.6.2. Виртуальные поля записи
  • 10.6. Расширения механизма «производящих» объявлений
    • 10.6.1. Производящие экземпляры для пустых типов данных
    • 10.6.2. Выведенный контекст для производящих объявлений
    • 10.6.3. Самостоятельные производящие объявления
    • 10.6.4. Производящие экземпляры дополнительных классов (Data, и т. д.)
      • 10.6.4.1. Производящие экземпляры Functor
      • 10.6.4.2. Производящие экземпляры Foldable
      • 10.6.4.3. Производящие экземпляры Traversable
      • 10.6.4.4. Производящие экземпляры Data
      • 10.6.4.5. Производящие экземпляры Typeable
      • 10.6.4.6. Производящие экземпляры Lift
    • 10.6.5. Обобщенные производящие экземпляры для newtypes
      • 10.6.5.1. Обобщение производящего объявления
      • 10.6.5.2. Более точное описание
      • 10.6.5.3. Связанные семейства типов
    • 10.6.6. Производящие объявления любого другого класса
    • 10.6.7. Стратегии вывода
      • 10.6.7.1. По умолчанию стратегия вывода
    • 10.6.8. Вывод через
  • 10.7. Синонимы шаблонов
    • 10.7.1. Синонимы шаблонов записей
    • 10.7.2. Синтаксис и область действия синонимов шаблонов
    • 10.7.3. Импорт и экспорт синонимов шаблонов
    • 10.7.4. Типизация синонимов шаблонов
    • 10.7.5. Сопоставление синонимов шаблонов
  • 10.8. Объявления классов и экземпляров
    • 10.8.1. Объявления классов
      • 10.8.1.1. Многопараметрические типы классов
      • 10.8.1.2. Надклассы объявления класса
      • 10.8.1.3. Ограниченные типы методов класса
      • 10.8.1.4. Подписи методов по умолчанию
      • 10.8.1.5. Нульарные типы классов
    • 10.8.2. Функциональные зависимости
      • 10.8.2.1. Правила для функциональных зависимостей
      • 10.8.2.2. Обзор функциональных зависимостей
        • 10.8.2.2.1. Попытка использования конструкторных классов
        • 10.8.2.2.2. Добавление функциональных зависимостей
    • 10.8.3. Объявления экземпляров
      • 10.8.3.1. Разрешение экземпляров
      • 10.8.3.2. Смягченные правила для заголовка экземпляра
      • 10.8.3.3. Смягченные правила для контекстов экземпляров
      • 10.8.3.4. Правила завершения экземпляров
      • 10.8.3.5. Неразрешимые экземпляры
      • 10.8.3.6. Перекрывающиеся экземпляры
      • 10.8.3.7. Подписи экземпляров: типы сигнатур в объявлениях экземпляров
    • 10.8.4. Перегруженные строковые литералы
    • 10.8.5. Перегруженные метки
    • 10.8.6. Перегруженные списки
      • 10.8.6.1. Класс IsList
      • 10.8.6.2. Переопределяемый синтаксис
      • 10.8.6.3. Умолчание
      • 10.8.6.4. Предположения о будущем
    • 10.8.7. Неразрешимые (или рекурсивные) надклассы
END_OF_DOCUMENT_MARKER
  • 10.9. Семьи типов
    • 10.9.1. Семьи данных
      • 10.9.1.1. Объявления семейств данных
      • 10.9.1.2. Объявления инстансов данных
      • 10.9.1.3. Перекрытие инстансов данных
    • 10.9.2. Семьи синонимов
      • 10.9.2.1. Объявления семейств типов
      • 10.9.2.2. Объявления инстансов типов
      • 10.9.2.3. Закрытые семейства типов
      • 10.9.2.4. Примеры семейств типов
      • 10.9.2.5. Совместимость и разделение уравнений семейств типов
      • 10.9.2.6. Решаемость инстансов синонимов типов
    • 10.9.3. Карты-подстановочные знаки в левой части инстансов семейств данных и типов
    • 10.9.4. Связанные семейства данных и типов
      • 10.9.4.1. Связанные инстансы
      • 10.9.4.2. Связанные по умолчанию синонимы типов
      • 10.9.4.3. Область действия параметров класса
      • 10.9.4.4. Контексты инстансов и связанные инстансы типов и данных
    • 10.9.5. Импорт и экспорт
      • 10.9.5.1. Примеры
      • 10.9.5.2. Инстансы
    • 10.9.6. Семьи типов и объявления инстансов
    • 10.9.7. Инъективные семейства типов
      • 10.9.7.1. Синтаксис аннотации инъективности
      • 10.9.7.2. Проверка аннотации инъективности относительно уравнений семейств типов
  • 10.10. Продвижение типов данных
    • 10.10.1. Мотивация
    • 10.10.2. Обзор
    • 10.10.3. Различие между типами и конструкторами
    • 10.10.4. Продвинутые типы списков и кортежей
    • 10.10.5. Продвижение экзистенциальных конструкторов данных
  • 10.11. Полиморфизм видов
    • 10.11.1. Обзор полиморфизма видов
    • 10.11.2. Обзор типа-в-типе
    • 10.11.3. Принципы вывода видов
    • 10.11.4. Вывод порядка переменных в объявлении типа/класса
    • 10.11.5. Полные пользовательские подписи видов и полиморфизм рекурсии
    • 10.11.6. Автономные подписи видов и полиморфизм рекурсии
    • 10.11.7. Автономные подписи видов и заголовки объявлений
    • 10.11.8. Вывод видов в закрытых семействах типов
    • 10.11.9. Вывод видов в объявлениях инстансов классов
    • 10.11.10. Вывод видов в подписях типов
    • 10.11.11. Явное квантификация видов
    • 10.11.12. Неявное квантификация в синонимах типов и инстансах семейств типов
    • 10.11.13. Индексированные видами GADТ
    • 10.11.14. Виды высшего ранга
    • 10.11.15. Ограничения в видах
    • 10.11.16. Вид Type
    • 10.11.17. Вывод зависимостей в объявлениях типов данных
    • 10.11.18. Вывод зависимостей в пользовательских forall
    • 10.11.19. Вывод видов по умолчанию без PolyKinds
    • 10.11.20. Красивый вывод в присутствии полиморфизма видов
  • 10.12. Полиморфизм лёгкости
    • 10.12.1. Отсутствие переменных или аргументов полиморфизма лёгкости
    • 10.12.2. Нижние полиморфизмы лёгкости
    • 10.12.3. Вывод полиморфных типов лёгкости
  • 10.13. Литералы на уровне типов
    • 10.13.1. Значения времени выполнения для литералов на уровне типов
    • 10.13.2. Вычисления с натуральными числами на уровне типов
  • 10.14. Ограничения равенства, Coercible и ограничение вида
    • 10.14.1. Ограничения равенства
    • 10.14.2. Гетерогенное равенство
    • 10.14.3. Неповышенное гетерогенное равенство
    • 10.14.4. Ограничение Coercible
    • 10.14.5. Вид Constraint
  • 10.15. Квантифицированные ограничения
    • 10.15.1. Мотивация
    • 10.15.2. Изменения в синтаксисе
    • 10.15.3. Изменения в типизации
    • 10.15.4. Суперклассы
    • 10.15.5. Перекрытие
    • 10.15.6. Поиск инстансов
    • 10.15.7. Завершение
    • 10.15.8. Согласованность
  • 10.16. Расширения типов сигнатур
    • 10.16.1. Явное универсальное квантификация (forall)
    • 10.16.2. Контекст типа сигнатуры
    • 10.16.3. Неоднозначные типы и проверка неоднозначности
    • 10.16.4. Явно-размеченный квантификатор
  • 10.17. Лексически ограниченные переменные типов
    • 10.17.1. Обзор
    • 10.17.2. Типовые подписи объявлений
    • 10.17.3. Типовые подписи выражений
    • 10.17.4. Типовые подписи шаблонов
    • 10.17.5. Объявления классов и экземпляров
  • 10.18. Связывания и обобщение
    • 10.18.1. Отключение ужасного ограничения мономорфизма
    • 10.18.2. Обобщение let
  • 10.19. Видимое применение типа
    • 10.19.1. Выведенные против указанных переменных типа
    • 10.19.2. Порядок указанных переменных
  • 10.20. Неявные параметры
    • 10.20.1. Ограничения типа неявных параметров
    • 10.20.2. Связывания неявных параметров
    • 10.20.3. Неявные параметры и полиморфная рекурсия
    • 10.20.4. Неявные параметры и мономорфизм
  • 10.21. Полиморфизм произвольного ранга
    • 10.21.1. Примеры
    • 10.21.2. Вывод типа
    • 10.21.3. Неявное квантификация
  • 10.22. Импредикативный полиморфизм
  • 10.23. Типизированные дыры
    • 10.23.1. Совпадения дыры
      • 10.23.1.1. Совпадения дыры уточнения
      • 10.23.1.2. Сортировка корректных совпадений дыры
  • 10.24. Частичные типы подписей
    • 10.24.1. Синтаксис
      • 10.24.1.1. Типовые шаблоны
      • 10.24.1.2. Именные шаблоны
      • 10.24.1.3. Шаблон дополнительных ограничений
    • 10.24.2. Где они могут появиться?
  • 10.25. Пользовательские ошибки компиляции
  • 10.26. Отсрочка ошибок типов до выполнения
    • 10.26.1. Включение отсрочки ошибок типов
    • 10.26.2. Отложенные ошибки типов в GHCi
    • 10.26.3. Ограничения отложенных ошибок типов
  • 10.27. Template Haskell
    • 10.27.1. Синтаксис
    • 10.27.2. Использование Template Haskell
    • 10.27.3. Просмотр сгенерированного кода Template Haskell
    • 10.27.4. Пример работы с Template Haskell
    • 10.27.5. Использование Template Haskell с профилированием
    • 10.27.6. Template Haskell квазицитирование
  • 10.28. Стрелочная нотация
    • 10.28.1. do-нотация для команд
    • 10.28.2. Условные команды
    • 10.28.3. Определение собственных управляющих конструкций
    • 10.28.4. Примитивные конструкции
    • 10.28.5. Различия с документом
    • 10.28.6. Переносимость
  • 10.29. Шаблоны bang и Strict Haskell
    • 10.29.1. Шаблоны bang
    • 10.29.2. Типы по умолчанию строгой
    • 10.29.3. Связывания шаблонов по умолчанию строгой
    • 10.29.4. Модульность
    • 10.29.5. Динамическая семантика шаблонов bang
  • 10.30. Утверждения
  • 10.31. Статические указатели
    • 10.31.1. Использование статических указателей
    • 10.31.2. Статическая семантика статических указателей
END_OF_DOCUMENT_MARKER
  • 10.32. Директивы
    • 10.32.1. Директива LANGUAGE
    • 10.32.2. Директива OPTIONS_GHC
    • 10.32.3. Директива INCLUDE
    • 10.32.4. Директивы WARNING и DEPRECATED
    • 10.32.5. Директива MINIMAL
    • 10.32.6. Директивы INLINE и NOINLINE
      • 10.32.6.1. Директива INLINE
      • 10.32.6.2. Директива INLINABLE
      • 10.32.6.3. Директива NOINLINE
      • 10.32.6.4. Модификатор CONLIKE
      • 10.32.6.5. Управление фазами
    • 10.32.7. Директива LINE
    • 10.32.8. Директива COLUMN
    • 10.32.9. Директива RULES
    • 10.32.10. Директива SPECIALIZE
      • 10.32.10.1. SPECIALIZE INLINE
      • 10.32.10.2. SPECIALIZE для импортированных функций
    • 10.32.11. Директива SPECIALIZE экземпляра
    • 10.32.12. Директива UNPACK
    • 10.32.13. Директива NOUNPACK
    • 10.32.14. Директива SOURCE
    • 10.32.15. Директивы COMPLETE
    • 10.32.16. Директивы OVERLAPPING, OVERLAPPABLE, OVERLAPS и INCOHERENT
  • 10.33. Правила переписывания
    • 10.33.1. Синтаксис
    • 10.33.2. Семантика
    • 10.33.3. Взаимодействие правил с директивами INLINE/NOINLINE
    • 10.33.4. Взаимодействие правил с директивами CONLIKE
    • 10.33.5. Взаимодействие правил с методами класса
    • 10.33.6. Слияние списков
    • 10.33.7. Специализация
    • 10.33.8. Управление процессом в правилах переписывания
  • 10.34. Специальные встроенные функции
  • 10.35. Обобщенные классы
  • 10.36. Обобщенное программирование
    • 10.36.1. Вывод представлений
    • 10.36.2. Написание обобщенных функций
    • 10.36.3. Неподнятые типы представлений
    • 10.36.4. Обобщенные значения по умолчанию
    • 10.36.5. Дополнительная информация
  • 10.37. Роли
    • 10.37.1. Номинальные, представительные и фантомные
    • 10.37.2. Вывод ролей
    • 10.37.3. Аннотации ролей
  • 10.38. HasCallStack
    • 10.38.1. Сравнение с другими источниками трассировок стека
  • 10.39. Конкурентный и параллельный Haskell
    • 10.39.1. Конкурентный Haskell
    • 10.39.2. Программная транзакционная память
    • 10.39.3. Параллельный Haskell
    • 10.39.4. Аннотирование чистого кода для параллелизма
  • 10.40. Safe Haskell
    • 10.40.1. Применение Safe Haskell
      • 10.40.1.1. Строгая типичная безопасность (хороший стиль)
      • 10.40.1.2. Создание безопасных систем (ограниченные монады IO)
    • 10.40.2. Язык Safe Haskell
      • 10.40.2.1. Безопасные перекрывающиеся экземпляры
    • 10.40.3. Безопасные импорты
    • 10.40.4. Доверие и режимы Safe Haskell
      • 10.40.4.1. Проверка доверия (-fpackage-trust отключено)
      • 10.40.4.2. Проверка доверия (-fpackage-trust включено)
      • 10.40.4.3. Пример
      • 10.40.4.4. Требования к надежности
      • 10.40.4.5. Доверие к пакету
    • 10.40.5. Вывод типа Safe Haskell
    • 10.40.6. Сводка флагов Safe Haskell
    • 10.40.7. Безопасная компиляция

© 2002–2007 The University Court of the University of Glasgow. All rights reserved.
Licensed under the Glasgow Haskell Compiler License.
https://downloads.haskell.org/~ghc/8.10.2/docs/html/users_guide/lang.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API