Spec-Zone.ru › Haskell 9

6.1.1. Управление редакциями языка и расширениями

GHC поддерживает несколько редакций языка: Haskell98, Haskell2010, GHC2021 и GHC2024. Каждая редакция языка состоит из набора языковых расширений; помимо них существует множество других расширений, которые пока не входят ни в одну редакцию, но могут быть включены явно.

В настоящее время по умолчанию используется GHC2021, если явно не указана другая редакция языка, — в целях обратной совместимости. Поскольку в более поздних версиях GHC по умолчанию может использоваться другая редакция языка, рекомендуется явно указывать редакцию. Для нового кода рекомендуется использовать GHC2024.

Редакцию языка можно выбрать:

  • на уровне пакета, например, с помощью default-language: GHC2024 в файле .cabal;
  • с помощью флага командной строки с префиксом «-X...» (например, -XGHC2024); или
  • для отдельного модуля с помощью прагмы LANGUAGE, например {-# LANGUAGE GHC2024 #-}.

Выбор редакции языка переопределяет все предыдущие варианты. Отключить редакцию языка нельзя.

Аналогичным образом можно управлять языковыми расширениями — включать или отключать их:

  • на уровне пакета, например, с помощью default-extensions: TemplateHaskell в файле .cabal;
  • с помощью флагов командной строки: флаг «-X...» включает расширение (например, -XTemplateHaskell), а флаг «-XNo...» отключает его (например, -XNoTemplateHaskell);
  • для отдельного модуля с помощью прагмы LANGUAGE, например {-# LANGUAGE TemplateHaskell #-} или {-# LANGUAGE NoTemplateHaskell #-}.
GHC2024
Начиная с:

9.10.1

GHC утверждает набор расширений, дополняющих Haskell 2010, для включения по умолчанию. Эти расширения считаются стабильными и консервативными.

Обратите внимание: поскольку GHC2024 включает ряд нестандартизированных расширений, гарантии стабильности для неё несколько слабее, чем, например, для Haskell2010. Хотя GHC старается не менять семантику этих расширений, такие изменения всё же возможны (например, упрощённое правило subsumption, введённое в GHC 9.0, привело к тому, что GHC стал отклонять некоторые программы, использующие RankNTypes).

Редакция языка GHC2024 включает следующие расширения:

  • BangPatterns
  • BinaryLiterals
  • ConstrainedClassMethods
  • ConstraintKinds
  • DataKinds
  • DeriveDataTypeable
  • DeriveFoldable
  • DeriveFunctor
  • DeriveGeneric
  • DeriveLift
  • DeriveTraversable
  • DerivingStrategies
  • DisambiguateRecordFields
  • DoAndIfThenElse
  • EmptyCase
  • EmptyDataDecls
  • EmptyDataDeriving
  • ExistentialQuantification
  • ExplicitForAll
  • ExplicitNamespaces
  • FieldSelectors
  • FlexibleContexts
  • FlexibleInstances
  • ForeignFunctionInterface
  • GADTs
  • GADTSyntax
  • GeneralisedNewtypeDeriving
  • HexFloatLiterals
  • ImplicitPrelude
  • ImportQualifiedPost
  • InstanceSigs
  • KindSignatures
  • LambdaCase
  • MonoLocalBinds
  • MonomorphismRestriction
  • MultiParamTypeClasses
  • NamedFieldPuns
  • NamedWildCards
  • NumericUnderscores
  • PatternGuards
  • PolyKinds
  • PostfixOperators
  • RankNTypes
  • RelaxedPolyRec
  • RoleAnnotations
  • ScopedTypeVariables
  • StandaloneDeriving
  • StandaloneKindSignatures
  • StarIsType
  • TraditionalRecordSyntax
  • TupleSections
  • TypeApplications
  • TypeOperators
  • TypeSynonymInstances
  • ImplicitStagePersistence
GHC2021
Начиная с:

9.2.1

Общие замечания о редакциях языка GHC20xx см. в разделе GHC2024.

Также обратите внимание: из-за небольшого упущения включение этой редакции работает немного иначе, чем включение каждого из составляющих её расширений. В частности, хотя TypeOperators подразумевает ExplicitNamespaces, ExplicitNamespaces не входит в GHC2021. Кроме того, хотя GADTs не входит в GHC2021, сочетания GADTSyntax и ExistentialQuantification достаточно для определения GADT и работы с ними.

Редакция языка GHC2021 включает следующие расширения:

  • BangPatterns
  • BinaryLiterals
  • ConstrainedClassMethods
  • ConstraintKinds
  • DeriveDataTypeable
  • DeriveFoldable
  • DeriveFunctor
  • DeriveGeneric
  • DeriveLift
  • DeriveTraversable
  • DoAndIfThenElse
  • EmptyCase
  • EmptyDataDecls
  • EmptyDataDeriving
  • ExistentialQuantification
  • ExplicitForAll
  • FieldSelectors
  • FlexibleContexts
  • FlexibleInstances
  • ForeignFunctionInterface
  • GADTSyntax
  • GeneralisedNewtypeDeriving
  • HexFloatLiterals
  • ImplicitPrelude
  • ImportQualifiedPost
  • InstanceSigs
  • KindSignatures
  • MonomorphismRestriction
  • MultiParamTypeClasses
  • NamedFieldPuns
  • NamedWildCards
  • NumericUnderscores
  • PatternGuards
  • PolyKinds
  • PostfixOperators
  • RankNTypes
  • RelaxedPolyRec
  • ScopedTypeVariables
  • StandaloneDeriving
  • StandaloneKindSignatures
  • StarIsType
  • TraditionalRecordSyntax
  • TupleSections
  • TypeApplications
  • TypeOperators
  • TypeSynonymInstances
  • NoExplicitNamespaces
  • ImplicitStagePersistence
Haskell2010

Компиляция с использованием редакции языка Haskell 2010, определённой в отчёте Haskell 2010. GHC стремится в основном вести себя как компилятор Haskell 2010, но есть несколько известных отклонений от стандарта (см. Стандарты Haskell и Glasgow Haskell: несоответствия языка).

Редакция языка Haskell2010 включает следующие языковые расширения:

  • CUSKs
  • DatatypeContexts
  • DeepSubsumption
  • DoAndIfThenElse
  • EmptyDataDecls
  • FieldSelectors
  • ForeignFunctionInterface
  • ImplicitPrelude
  • MonomorphismRestriction
  • PatternGuards
  • RelaxedPolyRec
  • StarIsType
  • TraditionalRecordSyntax
  • ImplicitStagePersistence
Haskell98

Компиляция с использованием редакции языка Haskell 98, определённой в отчёте Haskell 98. GHC стремится в основном вести себя как компилятор Haskell 98, но есть несколько известных отклонений от стандарта (см. Стандарты Haskell и Glasgow Haskell: несоответствия языка).

Редакция языка Haskell98 включает следующие языковые расширения:

  • CUSKs
  • DatatypeContexts
  • DeepSubsumption
  • FieldSelectors
  • ImplicitPrelude
  • MonomorphismRestriction
  • NPlusKPatterns
  • NondecreasingIndentation
  • StarIsType
  • TraditionalRecordSyntax
  • ImplicitStagePersistence

Хотя это и не рекомендуется, устаревший флаг -fglasgow-exts позволяет сразу включить множество расширений, поддерживаемых GHC.

-fglasgow-exts

Флаг -fglasgow-exts эквивалентен включению следующих расширений:

  • ConstrainedClassMethods
  • DeriveDataTypeable
  • DeriveFoldable
  • DeriveFunctor
  • DeriveGeneric
  • DeriveTraversable
  • EmptyDataDecls
  • ExistentialQuantification
  • ExplicitNamespaces
  • FlexibleContexts
  • FlexibleInstances
  • ForeignFunctionInterface
  • FunctionalDependencies
  • GeneralizedNewtypeDeriving
  • ImplicitParams
  • InterruptibleFFI
  • KindSignatures
  • LiberalTypeSynonyms
  • MagicHash
  • MultiParamTypeClasses
  • ParallelListComp
  • PatternGuards
  • PostfixOperators
  • RankNTypes
  • RecursiveDo
  • ScopedTypeVariables
  • StandaloneDeriving
  • TypeOperators
  • TypeSynonymInstances
  • UnboxedTuples
  • UnicodeSyntax
  • UnliftedFFITypes

Включение этих параметров — единственный эффект -fglasgow-exts. Мы стремимся отказаться от этого объединяющего флага и вместо этого включать отдельные возможности по мере необходимости.

© 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/9.14.1/docs/users_guide/exts/control.html

Spec-Zone.ru

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