module Hint.Extension (
Extension(..), availableExtensions, asExtension
) where
import Hint.Compat as Compat
availableExtensions :: [Extension]
availableExtensions = map asExtension Compat.supportedExtensions
asExtension :: String -> Extension
asExtension s = if isKnown s
then read s
else let no_s = "No" ++ s
in if isKnown no_s then read no_s
else UnknownExtension s
where isKnown e = e `elem` map show knownExtensions
data Extension = OverlappingInstances
| UndecidableInstances
| IncoherentInstances
| DoRec
| RecursiveDo
| ParallelListComp
| MultiParamTypeClasses
| MonomorphismRestriction
| FunctionalDependencies
| Rank2Types
| RankNTypes
| PolymorphicComponents
| ExistentialQuantification
| ScopedTypeVariables
| PatternSignatures
| ImplicitParams
| FlexibleContexts
| FlexibleInstances
| EmptyDataDecls
| CPP
| KindSignatures
| BangPatterns
| TypeSynonymInstances
| TemplateHaskell
| ForeignFunctionInterface
| Arrows
| Generics
| ImplicitPrelude
| NamedFieldPuns
| PatternGuards
| GeneralizedNewtypeDeriving
| ExtensibleRecords
| RestrictedTypeSynonyms
| HereDocuments
| MagicHash
| TypeFamilies
| StandaloneDeriving
| UnicodeSyntax
| UnliftedFFITypes
| InterruptibleFFI
| CApiFFI
| LiberalTypeSynonyms
| TypeOperators
| RecordWildCards
| RecordPuns
| DisambiguateRecordFields
| TraditionalRecordSyntax
| OverloadedStrings
| GADTs
| GADTSyntax
| MonoPatBinds
| RelaxedPolyRec
| ExtendedDefaultRules
| UnboxedTuples
| DeriveDataTypeable
| DeriveGeneric
| DefaultSignatures
| InstanceSigs
| ConstrainedClassMethods
| PackageImports
| ImpredicativeTypes
| NewQualifiedOperators
| PostfixOperators
| QuasiQuotes
| TransformListComp
| MonadComprehensions
| ViewPatterns
| XmlSyntax
| RegularPatterns
| TupleSections
| GHCForeignImportPrim
| NPlusKPatterns
| DoAndIfThenElse
| MultiWayIf
| LambdaCase
| RebindableSyntax
| ExplicitForAll
| DatatypeContexts
| MonoLocalBinds
| DeriveFunctor
| DeriveTraversable
| DeriveFoldable
| NondecreasingIndentation
| SafeImports
| Safe
| Trustworthy
| Unsafe
| ConstraintKinds
| PolyKinds
| DataKinds
| ParallelArrays
| RoleAnnotations
| OverloadedLists
| EmptyCase
| AutoDeriveTypeable
| NegativeLiterals
| BinaryLiterals
| NumDecimals
| NullaryTypeClasses
| ExplicitNamespaces
| AllowAmbiguousTypes
| JavaScriptFFI
| PatternSynonyms
| PartialTypeSignatures
| NamedWildCards
| DeriveAnyClass
| UnknownExtension String
deriving (Eq, Show, Read)
knownExtensions :: [Extension]
knownExtensions = [OverlappingInstances,
UndecidableInstances,
IncoherentInstances,
DoRec,
RecursiveDo,
ParallelListComp,
MultiParamTypeClasses,
MonomorphismRestriction,
FunctionalDependencies,
Rank2Types,
RankNTypes,
PolymorphicComponents,
ExistentialQuantification,
ScopedTypeVariables,
PatternSignatures,
ImplicitParams,
FlexibleContexts,
FlexibleInstances,
EmptyDataDecls,
CPP,
KindSignatures,
BangPatterns,
TypeSynonymInstances,
TemplateHaskell,
ForeignFunctionInterface,
Arrows,
Generics,
ImplicitPrelude,
NamedFieldPuns,
PatternGuards,
GeneralizedNewtypeDeriving,
ExtensibleRecords,
RestrictedTypeSynonyms,
HereDocuments,
MagicHash,
TypeFamilies,
StandaloneDeriving,
UnicodeSyntax,
UnliftedFFITypes,
InterruptibleFFI,
CApiFFI,
LiberalTypeSynonyms,
TypeOperators,
RecordWildCards,
RecordPuns,
DisambiguateRecordFields,
TraditionalRecordSyntax,
OverloadedStrings,
GADTs,
GADTSyntax,
MonoPatBinds,
RelaxedPolyRec,
ExtendedDefaultRules,
UnboxedTuples,
DeriveDataTypeable,
DeriveGeneric,
DefaultSignatures,
InstanceSigs,
ConstrainedClassMethods,
PackageImports,
ImpredicativeTypes,
NewQualifiedOperators,
PostfixOperators,
QuasiQuotes,
TransformListComp,
MonadComprehensions,
ViewPatterns,
XmlSyntax,
RegularPatterns,
TupleSections,
GHCForeignImportPrim,
NPlusKPatterns,
DoAndIfThenElse,
MultiWayIf,
LambdaCase,
RebindableSyntax,
ExplicitForAll,
DatatypeContexts,
MonoLocalBinds,
DeriveFunctor,
DeriveTraversable,
DeriveFoldable,
NondecreasingIndentation,
SafeImports,
Safe,
Trustworthy,
Unsafe,
ConstraintKinds,
PolyKinds,
DataKinds,
ParallelArrays,
RoleAnnotations,
OverloadedLists,
EmptyCase,
AutoDeriveTypeable,
NegativeLiterals,
BinaryLiterals,
NumDecimals,
NullaryTypeClasses,
ExplicitNamespaces,
AllowAmbiguousTypes,
JavaScriptFFI,
PatternSynonyms,
PartialTypeSignatures,
NamedWildCards,
DeriveAnyClass
]