Spec-Zone.ru › Haskell 8

Добро пожаловать в руководство пользователя GHC

Содержание:

  • 1. Лицензия компилятора Glasgow Haskell Compiler
  • 2. Введение в GHC
    • 2.1. Получение GHC
    • 2.2. Метаинформация: веб-сайты, списки рассылки и т. д.
    • 2.3. Сообщения об ошибках в GHC
    • 2.4. Политика нумерации версий GHC
  • 3. Примечания к выпуску версии 8.10.1
    • 3.1. Выделенные моменты
    • 3.2. Полные сведения
      • 3.2.1. Язык
      • 3.2.2. Компилятор
      • 3.2.3. API GHC
      • 3.2.4. GHCi
      • 3.2.5. Система выполнения
      • 3.2.6. Template Haskell
      • 3.2.7. Библиотека ghc-prim
      • 3.2.8. Библиотека ghc
      • 3.2.9. Библиотека base
      • 3.2.10. Система сборки
    • 3.3. Включенные библиотеки
  • 4. Примечания к выпуску версии 8.10.2
    • 4.1. Выделенные моменты
    • 4.2. Полные сведения
      • 4.2.1. Компилятор
      • 4.2.2. Система выполнения
      • 4.2.3. Библиотека base
      • 4.2.4. Система сборки
    • 4.3. Известные проблемы
    • 4.4. Включенные библиотеки
END_OF_DOCUMENT_MARKER
  • 5. Использование GHCi
    • 5.1. Введение в GHCi
    • 5.2. Загрузка исходных файлов
      • 5.2.1. Модули против имён файлов
      • 5.2.2. Внесение изменений и перекомпиляция
    • 5.3. Загрузка скомпилированного кода
    • 5.4. Интерактивная оценка в командной строке
      • 5.4.1. Действия ввода-вывода в командной строке
      • 5.4.2. Использование do в командной строке
      • 5.4.3. Многострочный ввод
      • 5.4.4. Объявления типов, классов и другие
      • 5.4.5. Что действительно в области видимости в командной строке?
        • 5.4.5.1. Влияние :load на область видимости
        • 5.4.5.2. Управление областью видимости с помощью import
        • 5.4.5.3. Управление областью видимости с помощью команды :module
        • 5.4.5.4. Квалифицированные имена
        • 5.4.5.5. :module и :load
      • 5.4.6. Команды :main и :run
      • 5.4.7. Переменная it
      • 5.4.8. Автоподстановка типов в GHCi
        • 5.4.8.1. Интерактивные классы
        • 5.4.8.2. Расширенные правила вокруг объявлений default
      • 5.4.9. Использование пользовательской интерактивной функции вывода
      • 5.4.10. Стек-трейсы в GHCi
    • 5.5. Отладчик GHCi
      • 5.5.1. Точки останова и просмотр переменных
        • 5.5.1.1. Установка точек останова
        • 5.5.1.2. Управление точками останова
      • 5.5.2. Пошаговое выполнение
      • 5.5.3. Вложенные точки останова
      • 5.5.4. Переменная _result
      • 5.5.5. Трассировка и история
      • 5.5.6. Отладка исключений
      • 5.5.7. Пример: просмотр функций
      • 5.5.8. Ограничения
    • 5.6. Вызов GHCi
      • 5.6.1. Пакеты
      • 5.6.2. Дополнительные библиотеки
    • 5.7. Команды GHCi
    • 5.8. Команды :set и :seti
      • 5.8.1. Параметры GHCi
      • 5.8.2. Установка параметров командной строки GHC в GHCi
      • 5.8.3. Установка параметров только для интерактивной оценки
    • 5.9. Файлы .ghci и .haskeline
      • 5.9.1. Файлы .ghci
      • 5.9.2. Файл .haskeline
    • 5.10. Компиляция в объектный код внутри GHCi
    • 5.11. Запуск интерпретатора в отдельном процессе
    • 5.12. Запуск интерпретатора на другом хосте
    • 5.13. Часто задаваемые вопросы и моменты, на которые следует обратить внимание
  • 6. Использование runghc
    • 6.1. Использование
    • 6.2. Флаги runghc
    • 6.3. Флаги GHC
END_OF_DOCUMENT_MARKER
  • 7. Использование GHC
    • 7.1. Использование GHC
      • 7.1.1. Начало работы: компиляция программ
      • 7.1.2. Обзор опций
        • 7.1.2.1. Аргументы командной строки
        • 7.1.2.2. Опции командной строки в исходных файлах
        • 7.1.2.3. Установка опций в GHCi
      • 7.1.3. Динамические и режимные опции
      • 7.1.4. Значимые расширения файлов
      • 7.1.5. Режимы работы
        • 7.1.5.1. Использование ghc --make
        • 7.1.5.2. Режим вычисления выражений
        • 7.1.5.3. Режим пакетной компиляции
      • 7.1.6. Опции подробности
      • 7.1.7. Флаги, специфичные для платформы
      • 7.1.8. Разные флаги
        • 7.1.8.1. Другие переменные среды
    • 7.2. Предупреждения и проверки на корректность
    • 7.3. Оптимизация (улучшение кода)
      • 7.3.1. -O*: удобные «пакеты» флагов оптимизации.
      • 7.3.2. -f*: платформенно-независимые флаги
    • 7.4. Использование Concurrent Haskell
    • 7.5. Использование SMP-параллелизма
      • 7.5.1. Опции времени компиляции для SMP-параллелизма
      • 7.5.2. Опции RTS для SMP-параллелизма
      • 7.5.3. Советы по использованию SMP-параллелизма
    • 7.6. Справочник по флагам
      • 7.6.1. Опции подробности
      • 7.6.2. Альтернативные режимы работы
      • 7.6.3. Какие фазы запустить
      • 7.6.4. Перенаправление вывода
      • 7.6.5. Сохранение промежуточных файлов
      • 7.6.6. Временные файлы
      • 7.6.7. Поиск импортов
      • 7.6.8. Опции файла интерфейса
      • 7.6.9. Проверка повторной компиляции
      • 7.6.10. Опции интерактивного режима
      • 7.6.11. Пакеты
      • 7.6.12. Опции языка
      • 7.6.13. Предупреждения
      • 7.6.14. Уровни оптимизации
      • 7.6.15. Отдельные оптимизации
      • 7.6.16. Опции профилирования
      • 7.6.17. Опции покрытия программы
      • 7.6.18. Опции препроцессора C
      • 7.6.19. Опции генерации кода
      • 7.6.20. Опции компоновки
      • 7.6.21. Опции плагинов
      • 7.6.22. Замена фаз
      • 7.6.23. Принудительное назначение опций конкретным фазам
      • 7.6.24. Платформенно-специфичные опции
      • 7.6.25. Опции отладки компилятора
      • 7.6.26. Разные опции компилятора
    • 7.7. Запуск скомпилированной программы
      • 7.7.1. Установка опций RTS
        • 7.7.1.1. Установка опций RTS в командной строке
        • 7.7.1.2. Установка опций RTS во время компиляции
        • 7.7.1.3. Установка опций RTS с переменной среды GHCRTS
        • 7.7.1.4. «Хуксы» для изменения поведения RTS
      • 7.7.2. Разные опции RTS
      • 7.7.3. Опции RTS для управления сборщиком мусора
      • 7.7.4. Опции RTS для создания статистических данных выполнения
      • 7.7.5. Опции RTS для конкуретности и параллелизма
      • 7.7.6. Опции RTS для профилирования
      • 7.7.7. Трассировка
      • 7.7.8. Опции RTS для хакеров, отладчиков и слишком любопытных
      • 7.7.9. Получение информации о RTS
    • 7.8. Имена файлов и отдельная компиляция
      • 7.8.1. Файлы исходного кода Haskell
      • 7.8.2. Файлы вывода
      • 7.8.3. Путь поиска
      • 7.8.4. Перенаправление вывода компиляции
      • 7.8.5. Сохранение промежуточных файлов
      • 7.8.6. Перенаправление временных файлов
      • 7.8.7. Другие параметры, относящиеся к файлам интерфейса
      • 7.8.8. Параметры, относящиеся к расширенным файлам интерфейса
      • 7.8.9. Проверка повторной компиляции
      • 7.8.10. Как компилировать взаимно рекурсивные модули
      • 7.8.11. Подписи модулей
      • 7.8.12. Использование make
      • 7.8.13. Генерация зависимостей
      • 7.8.14. Модули-сироты и объявления экземпляров
    • 7.9. Пакеты
      • 7.9.1. Использование пакетов
      • 7.9.2. Пакет main
      • 7.9.3. Последствия использования пакетов для языка Haskell
      • 7.9.4. Уточнение и переименование модулей
      • 7.9.5. Базы данных пакетов
        • 7.9.5.1. Переменная среды GHC_PACKAGE_PATH
        • 7.9.5.2. Среды пакетов
      • 7.9.6. Идентификаторы установленных пакетов, зависимости и сломанные пакеты
      • 7.9.7. Управление пакетами (команда ghc-pkg)
      • 7.9.8. Сборка пакета из исходного кода Haskell
      • 7.9.9. InstalledPackageInfo: спецификация пакета
    • 7.10. ГЕНЕРАТОРЫ ГЕНЕРАТОРОВ ГХ
      • 7.10.1. ГЕНЕРАТОР НАТИВНОГО КОДА (-fasm)
      • 7.10.2. Генератор кода LLVM (-fllvm)
      • 7.10.3. Генератор кода C (-fvia-C)
      • 7.10.4. Компиляция без регистрации
    • 7.11. Параметры, связанные с конкретной фазой
      • 7.11.1. Замена программы для одной или нескольких фаз
      • 7.11.2. Принудительное применение параметров к конкретной фазе
      • 7.11.3. Параметры, влияющие на препроцессор C
        • 7.11.3.1. Стандартные макросы CPP
        • 7.11.3.2. CPP и пробелы в строках
      • 7.11.4. Параметры, влияющие на препроцессор Haskell
      • 7.11.5. Параметры, влияющие на генерацию кода
      • 7.11.6. Параметры, влияющие на компоновку
    • 7.12. Использование динамических библиотек
      • 7.12.1. Создание программ, использующих динамические библиотеки
      • 7.12.2. Динамические библиотеки для пакетов Haskell
      • 7.12.3. Динамические библиотеки, экспортирующие C API
      • 7.12.4. Поиск динамических библиотек во время выполнения
        • 7.12.4.1. Unix
        • 7.12.4.2. Mac OS X
    • 7.13. Отладка компилятора
      • 7.13.1. Вывод промежуточных структур компилятора
        • 7.13.1.1. Фронтенд
        • 7.13.1.2. Проверка типов и переименование
        • 7.13.1.3. Представление ядра и упрощение
        • 7.13.1.4. Представление STG
        • 7.13.1.5. Представление C--
        • 7.13.1.6. Генератор кода LLVM
        • 7.13.1.7. Генератор нативного кода
        • 7.13.1.8. Разные дампы бэкенда
      • 7.13.2. Форматирование дампов
      • 7.13.3. Подавление нежелательной информации
      • 7.13.4. Проверка на непротиворечивость
      • 7.13.5. Проверка на детерминизм
      • 7.13.6. Другие
  • 8. Профилирование
    • 8.1. Центры затрат и стеки центров затрат
      • 8.1.1. Ввод центров затрат вручную
      • 8.1.2. Правила распределения затрат
    • 8.2. Параметры компилятора для профилирования
    • 8.3. Профилирование времени и распределения
      • 8.3.1. Формат профиля JSON
    • 8.4. Профилирование использования памяти
      • 8.4.1. Параметры RTS для профилирования кучи
      • 8.4.2. Профилирование ссылок
        • 8.4.2.1. Советы по использованию профилирования ссылок
      • 8.4.3. Биографическое профилирование
      • 8.4.4. Фактическая резидентность памяти
    • 8.5. hp2ps – Вывод профилей кучи в PostScript
      • 8.5.1. Обработка файла hp
      • 8.5.2. Увеличение масштаба областей профиля
      • 8.5.3. Просмотр профиля кучи работающей программы
      • 8.5.4. Просмотр профиля кучи в реальном времени
    • 8.6. Профилирование параллельных и конкурентных программ
    • 8.7. Наблюдение за покрытием кода
      • 8.7.1. Небольшой пример: Взаимное обращение
      • 8.7.2. Параметры для инструментирования кода для покрытия
      • 8.7.3. Набор инструментов hpc
        • 8.7.3.1. hpc report
        • 8.7.3.2. hpc markup
        • 8.7.3.3. hpc sum
        • 8.7.3.4. hpc combine
        • 8.7.3.5. hpc map
        • 8.7.3.6. hpc overlay и hpc draft
      • 8.7.4. Ограничения и недостатки покрытия кода Haskell-программы
    • 8.8. Использование профилирования «ticky-ticky» (для разработчиков)
  • 9. Советы по: sooner, faster, smaller, thriftier
    • 9.1. Sooner: создание программы быстрее
    • 9.2. Faster: создание программы, выполняющейся быстрее
    • 9.3. Smaller: создание более компактной программы
    • 9.4. Thriftier: создание программы, потребляющей меньше места в куче
  • 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. Синтаксис Unicode
      • 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. Запись квалифицированного в постпозитивной позиции
      • 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. Виртуальные поля записей
END_OF_DOCUMENT_MARKER
    • 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.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. Неопределяемые (или рекурсивные) надклассы
    • 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. Типически-индексированные GADTs
      • 10.11.14. Типовые семейства высшего ранга
      • 10.11.15. Ограничения в типах
      • 10.11.16. Тип Type
      • 10.11.17. Вывод зависимости в объявлениях типов данных
      • 10.11.18. Вывод зависимости в пользовательских forall
      • 10.11.19. По умолчанию типы без поликинд
      • 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. Шаблоны 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 и Строгий 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. Статическая семантика статических указателей
    • 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. Безопасный Haskell
      • 10.40.1. Использование Безопасного Haskell
        • 10.40.1.1. Строгая проверка типов (хороший стиль)
        • 10.40.1.2. Создание безопасных систем (ограниченные монады IO)
      • 10.40.2. Безопасный язык
        • 10.40.2.1. Безопасные перекрывающиеся экземпляры
      • 10.40.3. Безопасные импорты
      • 10.40.4. Доверие и режимы Безопасного 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. Вывод типов Безопасного Haskell
      • 10.40.6. Сводка флагов Безопасного Haskell
      • 10.40.7. Безопасная компиляция
  • 11. Интерфейс внешних функций (FFI)
    • 11.1. Различия GHC в главе FFI
      • 11.1.1. Гарантированная безопасность вызовов
    • 11.2. Расширения GHC для главы FFI
      • 11.2.1. Неподнятые типы FFI
      • 11.2.2. Обертка newtype монады IO
      • 11.2.3. Явные «forall» в иностранных типах
      • 11.2.4. Примитивные импорты
      • 11.2.5. Прерывимые внешние вызовы
      • 11.2.6. Конвенция вызова CAPI
      • 11.2.7. hs_thread_done()
      • 11.2.8. Эффективное освобождение многих стабильных указателей
    • 11.3. Использование FFI с GHC
      • 11.3.1. Использование foreign export и foreign import ccall "wrapper" с GHC
        • 11.3.1.1. Использование собственного main()
        • 11.3.1.2. Создание библиотеки Haskell, которую можно вызывать из внешнего кода
      • 11.3.2. Использование заголовочных файлов
      • 11.3.3. Выделение памяти
      • 11.3.4. Многопоточность и FFI
        • 11.3.4.1. Внешние импорты и многопоточность
        • 11.3.4.2. Взаимосвязь потоков Haskell и потоков ОС
        • 11.3.4.3. Внешние экспорты и многопоточность
        • 11.3.4.4. Об использовании hs_exit()
        • 11.3.4.5. Разбуживание потоков Haskell из C
      • 11.3.5. Числа с плавающей точкой и FFI
      • 11.3.6. Прикреплённые массивы байтов
  • 12. Расширение и использование GHC как библиотеки
    • 12.1. Аннотации исходного кода
      • 12.1.1. Аннотирование значений
      • 12.1.2. Аннотирование типов
      • 12.1.3. Аннотирование модулей
    • 12.2. Использование GHC как библиотеки
    • 12.3. Плагины компилятора
      • 12.3.1. Использование плагинов компилятора
      • 12.3.2. Создание плагинов компилятора
      • 12.3.3. Плагины ядра более подробно
        • 12.3.3.1. Модификация связей
        • 12.3.3.2. Использование аннотаций
      • 12.3.4. Плагины типизатора
        • 12.3.4.1. Решение ограничений с помощью плагинов
      • 12.3.5. Плагины исходного кода
        • 12.3.5.1. Представление после разбора
        • 12.3.5.2. Представление после проверки типов
        • 12.3.5.3. Выполненный код
        • 12.3.5.4. Файлы интерфейса
        • 12.3.5.5. Пример плагина исходного кода
      • 12.3.6. Плагины для подгонки дырок
        • 12.3.6.1. Плагины для подгонки дырок с состоянием
        • 12.3.6.2. Пример плагина для подгонки дырок
      • 12.3.7. Управление перекомпиляцией
      • 12.3.8. Плагины фронтенда
      • 12.3.9. Плагины флагов DynFlags
  • 13. Что делать, если что-то пошло не так
    • 13.1. Когда компилятор «делает неправильные вещи»
    • 13.2. Когда ваша программа «делает неправильные вещи»
  • 14. Отладка скомпилированных программ
    • 14.1. Руководство
    • 14.2. Запрос трассировки стека из кода Haskell
    • 14.3. Запрос трассировки стека с помощью SIGQUIT
    • 14.4. Примечания разработчика: аннотации DWARF
      • 14.4.1. Сущности отладочной информации
        • 14.4.1.1. DW_TAG_ghc_src_note
    • 14.5. Дополнительное чтение
  • 15. Другие утилиты Haskell
    • 15.1. «Yacc для Haskell»: happy
    • 15.2. Создание интерфейсов Haskell для кода C: hsc2hs
      • 15.2.1. Синтаксис командной строки
      • 15.2.2. Синтаксис ввода
      • 15.2.3. Пользовательские конструкции
      • 15.2.4. Кросс-компиляция
END_OF_DOCUMENT_MARKER
  • 16. Запуск GHC на Win32 системах
    • 16.1. Запуск GHC на платформах Windows
    • 16.2. Запуск GHCi на Windows
    • 16.3. Взаимодействие с терминалом
    • 16.4. Различия в поведении библиотек
    • 16.5. Пути к файлам в Windows
    • 16.6. Использование GHC (и других исполняемых файлов, скомпилированных GHC) с Cygwin
      • 16.6.1. Общие сведения
      • 16.6.2. Проблема
      • 16.6.3. Действия
    • 16.7. Компиляция и использование Win32 DLL
      • 16.7.1. Создание DLL
      • 16.7.2. Создание DLL для вызова из других языков
        • 16.7.2.1. Использование из VBA
        • 16.7.2.2. Использование из C++
  • 17. Известные ошибки и недостатки
    • 17.1. Стандарты Haskell против Glasgow Haskell: несоответствие языка
      • 17.1.1. Отклонение от Haskell 98 и Haskell 2010
        • 17.1.1.1. Лексический синтаксис
        • 17.1.1.2. Контекстно-свободный синтаксис
        • 17.1.1.3. Выражения и шаблоны
        • 17.1.1.4. Объявления и привязки
        • 17.1.1.5. Проверка типов рекурсивных групп привязок
        • 17.1.1.6. По умолчанию заголовки модулей с -main-is
        • 17.1.1.7. Система модулей и файлы интерфейса
        • 17.1.1.8. Числа, базовые типы и встроенные классы
        • 17.1.1.9. Поддержка в Prelude
        • 17.1.1.10. Интерфейс внешних функций
        • 17.1.1.11. Разделы операторов
      • 17.1.2. Интерпретация GHC неопределённого поведения в Haskell 98 и Haskell 2010
    • 17.2. Известные ошибки или недостатки
      • 17.2.1. Ошибки в GHC
      • 17.2.2. Ошибки в GHCi (интерактивная GHC)
  • 18. Форматы журналов событий
    • 18.1. Формат журнала событий
    • 18.2. Диагностика системного исполнения
      • 18.2.1. Наборы возможностей
      • 18.2.2. Информация об окружении
      • 18.2.3. События потоков и планирования
      • 18.2.4. События сборщика мусора
      • 18.2.5. События и статистика кучи
      • 18.2.6. События искр
      • 18.2.7. События возможностей
      • 18.2.8. События задач
      • 18.2.9. События отслеживания
    • 18.3. Вывод журнала событий профилировщика кучи
      • 18.3.1. Типы событий метаданных
        • 18.3.1.1. Начало потока образцов
        • 18.3.1.2. Определения центров затрат
        • 18.3.1.3. Типы событий образцов
        • 18.3.1.4. Разбиение по центрам затрат
        • 18.3.1.5. Разбиение строк
    • 18.4. Вывод журнала событий профилировщика времени
      • 18.4.1. Событие начала профилирования
      • 18.4.2. Событие образца профилирования
    • 18.5. Событие образца биографического профиля
    • 18.6. Вывод событий неперемещаемого сборщика мусора
      • 18.6.1. Перепись неперемещаемой кучи
END_OF_DOCUMENT_MARKER
  • 19. Уход и содержание вашего руководства пользователя GHC
    • 19.1. Основы
      • 19.1.1. Заголовки
      • 19.1.2. Форматирование кода
        • 19.1.2.1. Haskell
        • 19.1.2.2. Другие языки
      • 19.1.3. Ссылки
        • 19.1.3.1. Внутри руководства пользователя
        • 19.1.3.2. К ресурсам GHC
        • 19.1.3.3. К внешним ресурсам
        • 19.1.3.4. К документации Haddock по основным библиотекам
        • 19.1.3.5. Математика
      • 19.1.4. Элементы индекса
    • 19.2. Цитаты
    • 19.3. Предупреждения
    • 19.4. Документирование опций командной строки и команд GHCi
      • 19.4.1. Опции командной строки
      • 19.4.2. Команды GHCi
    • 19.5. Стилистические соглашения
    • 19.6. Справочные материалы ReST

© 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/index.html

Spec-Zone.ru

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