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
Since:

9.10.1

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

Обратите внимание, что, поскольку GHC2024 включает в себя ряд нестандартизированных расширений, гарантии стабильности, которые он предоставляет, не так сильны, как, например, гарантии Haskell2010. Хотя GHC прилагает все усилия, чтобы избежать изменения семантики этих расширений, изменения все же могут произойти (например, упрощенное изменение субсуммирования, внесенное в 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
GHC2021
Since:

9.2.1

См. GHC2024 для общих комментариев по GHC20xx языковым редакциям.

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

Языковая редакция 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
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
Haskell98

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

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

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

Хотя не рекомендуется, устаревший флаг -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.12.1/docs/users_guide/exts/control.html

Spec-Zone.ru

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