-- misc stuff
machdepCCOpts, picCCOpts,
- supportedLanguages,
+ supportedLanguages, languageOptions,
compilerInfo,
) where
import Panic ( panic, GhcException(..) )
import UniqFM ( UniqFM )
import Util
-import Maybes ( orElse, fromJust )
+import Maybes ( orElse )
import SrcLoc ( SrcSpan )
import Outputable
import {-# SOURCE #-} ErrUtils ( Severity(..), Message, mkLocMessage )
| Opt_WarnUnusedImports
| Opt_WarnUnusedMatches
| Opt_WarnDeprecations
+ | Opt_WarnDeprecatedFlags
| Opt_WarnDodgyImports
| Opt_WarnOrphans
| Opt_WarnTabs
standardWarnings :: [DynFlag]
standardWarnings
= [ Opt_WarnDeprecations,
+ Opt_WarnDeprecatedFlags,
Opt_WarnOverlappingPatterns,
Opt_WarnMissingFields,
Opt_WarnMissingMethods,
liberate_case = dopt Opt_LiberateCase dflags
rule_check = ruleCheck dflags
vectorisation = dopt Opt_Vectorise dflags
- -- static_args = dopt Opt_StaticArgumentTransformation dflags
+ static_args = dopt Opt_StaticArgumentTransformation dflags
maybe_rule_check phase = runMaybe rule_check (CoreDoRuleCheck phase)
-- may expose extra opportunities to float things outwards. However, to fix
-- up the output of the transformation we need at do at least one simplify
-- after this before anything else
- -- runWhen static_args CoreDoStaticArgs,
- -- XXX disabled, see #2321
+ runWhen static_args (CoreDoPasses [ simpl_gently, CoreDoStaticArgs ]),
-- initial simplify: mk specialiser happy: minimum effort please
simpl_gently,
[ flagName flag | flag <- dynamic_flags, ok (flagOptKind flag) ] ++
map ("fno-"++) flags ++
map ("f"++) flags ++
- map ("X"++) xs ++
- map ("XNo"++) xs
+ map ("X"++) supportedLanguages ++
+ map ("XNo"++) supportedLanguages
where ok (PrefixPred _ _) = False
ok _ = True
- flags = map fst fFlags
- xs = map fst xFlags
+ flags = [ name | (name, _, _) <- fFlags ]
dynamic_flags :: [Flag DynP]
dynamic_flags = [
------- recompilation checker --------------------------------------
, Flag "recomp" (NoArg (unSetDynFlag Opt_ForceRecomp))
- (Deprecated "Use -fforce-recomp instead")
- , Flag "no-recomp" (NoArg (setDynFlag Opt_ForceRecomp))
(Deprecated "Use -fno-force-recomp instead")
+ , Flag "no-recomp" (NoArg (setDynFlag Opt_ForceRecomp))
+ (Deprecated "Use -fforce-recomp instead")
------- Packages ----------------------------------------------------
, Flag "package-conf" (HasArg extraPkgConf_) Supported
Supported
, Flag "fno-glasgow-exts" (NoArg (mapM_ unSetDynFlag glasgowExtsFlags))
Supported
-
- -- XXX We need to flatten these:
-
- -- the rest of the -f* and -fno-* flags
- , Flag "f"
- (PrefixPred (isFlag fFlags)
- (\f -> setDynFlag (getFlag fFlags f)))
- Supported
- , Flag "f"
- (PrefixPred (isPrefFlag "no-" fFlags)
- (\f -> unSetDynFlag (getPrefFlag "no-" fFlags f)))
- Supported
-
- -- the -X* and -XNo* flags
- , Flag "X"
- (PrefixPred (isFlag xFlags)
- (\f -> setDynFlag (getFlag xFlags f)))
- Supported
- , Flag "X"
- (PrefixPred (isPrefFlag "No" xFlags)
- (\f -> unSetDynFlag (getPrefFlag "No" xFlags f)))
- Supported
]
+ ++ map (mkFlag True "f" setDynFlag ) fFlags
+ ++ map (mkFlag False "fno-" unSetDynFlag) fFlags
+ ++ map (mkFlag True "X" setDynFlag ) xFlags
+ ++ map (mkFlag False "XNo" unSetDynFlag) xFlags
+
+mkFlag :: Bool -- True => turn it on, False => turn it off
+ -> String
+ -> (DynFlag -> DynP ())
+ -> (String, DynFlag, Bool -> Deprecated)
+ -> Flag DynP
+mkFlag turnOn flagPrefix f (name, dynflag, deprecated)
+ = Flag (flagPrefix ++ name) (NoArg (f dynflag)) (deprecated turnOn)
+
+deprecatedForLanguage :: String -> Bool -> Deprecated
+deprecatedForLanguage lang turnOn =
+ Deprecated ("Use the " ++ prefix ++ lang ++ " language instead")
+ where prefix = if turnOn then "" else "No"
-- these -f<blah> flags can all be reversed with -fno-<blah>
-fFlags :: [(String, DynFlag)]
+fFlags :: [(String, DynFlag, Bool -> Deprecated)]
fFlags = [
- ( "warn-dodgy-imports", Opt_WarnDodgyImports ),
- ( "warn-duplicate-exports", Opt_WarnDuplicateExports ),
- ( "warn-hi-shadowing", Opt_WarnHiShadows ),
- ( "warn-implicit-prelude", Opt_WarnImplicitPrelude ),
- ( "warn-incomplete-patterns", Opt_WarnIncompletePatterns ),
- ( "warn-incomplete-record-updates", Opt_WarnIncompletePatternsRecUpd ),
- ( "warn-missing-fields", Opt_WarnMissingFields ),
- ( "warn-missing-methods", Opt_WarnMissingMethods ),
- ( "warn-missing-signatures", Opt_WarnMissingSigs ),
- ( "warn-name-shadowing", Opt_WarnNameShadowing ),
- ( "warn-overlapping-patterns", Opt_WarnOverlappingPatterns ),
- ( "warn-simple-patterns", Opt_WarnSimplePatterns ),
- ( "warn-type-defaults", Opt_WarnTypeDefaults ),
- ( "warn-monomorphism-restriction", Opt_WarnMonomorphism ),
- ( "warn-unused-binds", Opt_WarnUnusedBinds ),
- ( "warn-unused-imports", Opt_WarnUnusedImports ),
- ( "warn-unused-matches", Opt_WarnUnusedMatches ),
- ( "warn-deprecations", Opt_WarnDeprecations ),
- ( "warn-orphans", Opt_WarnOrphans ),
- ( "warn-tabs", Opt_WarnTabs ),
- ( "print-explicit-foralls", Opt_PrintExplicitForalls ),
- ( "strictness", Opt_Strictness ),
- ( "static-argument-transformation", Opt_StaticArgumentTransformation ),
- ( "full-laziness", Opt_FullLaziness ),
- ( "liberate-case", Opt_LiberateCase ),
- ( "spec-constr", Opt_SpecConstr ),
- ( "cse", Opt_CSE ),
- ( "ignore-interface-pragmas", Opt_IgnoreInterfacePragmas ),
- ( "omit-interface-pragmas", Opt_OmitInterfacePragmas ),
- ( "do-lambda-eta-expansion", Opt_DoLambdaEtaExpansion ),
- ( "ignore-asserts", Opt_IgnoreAsserts ),
- ( "do-eta-reduction", Opt_DoEtaReduction ),
- ( "case-merge", Opt_CaseMerge ),
- ( "unbox-strict-fields", Opt_UnboxStrictFields ),
- ( "method-sharing", Opt_MethodSharing ),
- ( "dicts-cheap", Opt_DictsCheap ),
- ( "excess-precision", Opt_ExcessPrecision ),
- ( "asm-mangling", Opt_DoAsmMangling ),
- ( "print-bind-result", Opt_PrintBindResult ),
- ( "force-recomp", Opt_ForceRecomp ),
- ( "hpc-no-auto", Opt_Hpc_No_Auto ),
- ( "rewrite-rules", Opt_RewriteRules ),
- ( "break-on-exception", Opt_BreakOnException ),
- ( "break-on-error", Opt_BreakOnError ),
- ( "print-evld-with-show", Opt_PrintEvldWithShow ),
- ( "print-bind-contents", Opt_PrintBindContents ),
- ( "run-cps", Opt_RunCPSZ ),
- ( "convert-to-zipper-and-back", Opt_ConvertToZipCfgAndBack),
- ( "vectorise", Opt_Vectorise ),
- ( "regs-graph", Opt_RegsGraph),
- ( "regs-iterative", Opt_RegsIterative),
- -- Deprecated in favour of -XTemplateHaskell:
- ( "th", Opt_TemplateHaskell ),
- -- Deprecated in favour of -XForeignFunctionInterface:
- ( "fi", Opt_ForeignFunctionInterface ),
- -- Deprecated in favour of -XForeignFunctionInterface:
- ( "ffi", Opt_ForeignFunctionInterface ),
- -- Deprecated in favour of -XArrows:
- ( "arrows", Opt_Arrows ),
- -- Deprecated in favour of -XGenerics:
- ( "generics", Opt_Generics ),
- -- Deprecated in favour of -XImplicitPrelude:
- ( "implicit-prelude", Opt_ImplicitPrelude ),
- -- Deprecated in favour of -XBangPatterns:
- ( "bang-patterns", Opt_BangPatterns ),
- -- Deprecated in favour of -XMonomorphismRestriction:
- ( "monomorphism-restriction", Opt_MonomorphismRestriction ),
- -- Deprecated in favour of -XMonoPatBinds:
- ( "mono-pat-binds", Opt_MonoPatBinds ),
- -- Deprecated in favour of -XExtendedDefaultRules:
- ( "extended-default-rules", Opt_ExtendedDefaultRules ),
- -- Deprecated in favour of -XImplicitParams:
- ( "implicit-params", Opt_ImplicitParams ),
- -- Deprecated in favour of -XScopedTypeVariables:
- ( "scoped-type-variables", Opt_ScopedTypeVariables ),
- -- Deprecated in favour of -XPArr:
- ( "parr", Opt_PArr ),
- -- Deprecated in favour of -XOverlappingInstances:
- ( "allow-overlapping-instances", Opt_OverlappingInstances ),
- -- Deprecated in favour of -XUndecidableInstances:
- ( "allow-undecidable-instances", Opt_UndecidableInstances ),
- -- Deprecated in favour of -XIncoherentInstances:
- ( "allow-incoherent-instances", Opt_IncoherentInstances ),
- ( "gen-manifest", Opt_GenManifest ),
- ( "embed-manifest", Opt_EmbedManifest )
+ ( "warn-dodgy-imports", Opt_WarnDodgyImports, const Supported ),
+ ( "warn-duplicate-exports", Opt_WarnDuplicateExports, const Supported ),
+ ( "warn-hi-shadowing", Opt_WarnHiShadows, const Supported ),
+ ( "warn-implicit-prelude", Opt_WarnImplicitPrelude, const Supported ),
+ ( "warn-incomplete-patterns", Opt_WarnIncompletePatterns, const Supported ),
+ ( "warn-incomplete-record-updates", Opt_WarnIncompletePatternsRecUpd, const Supported ),
+ ( "warn-missing-fields", Opt_WarnMissingFields, const Supported ),
+ ( "warn-missing-methods", Opt_WarnMissingMethods, const Supported ),
+ ( "warn-missing-signatures", Opt_WarnMissingSigs, const Supported ),
+ ( "warn-name-shadowing", Opt_WarnNameShadowing, const Supported ),
+ ( "warn-overlapping-patterns", Opt_WarnOverlappingPatterns, const Supported ),
+ ( "warn-simple-patterns", Opt_WarnSimplePatterns, const Supported ),
+ ( "warn-type-defaults", Opt_WarnTypeDefaults, const Supported ),
+ ( "warn-monomorphism-restriction", Opt_WarnMonomorphism, const Supported ),
+ ( "warn-unused-binds", Opt_WarnUnusedBinds, const Supported ),
+ ( "warn-unused-imports", Opt_WarnUnusedImports, const Supported ),
+ ( "warn-unused-matches", Opt_WarnUnusedMatches, const Supported ),
+ ( "warn-deprecations", Opt_WarnDeprecations, const Supported ),
+ ( "warn-deprecated-flags", Opt_WarnDeprecatedFlags, const Supported ),
+ ( "warn-orphans", Opt_WarnOrphans, const Supported ),
+ ( "warn-tabs", Opt_WarnTabs, const Supported ),
+ ( "print-explicit-foralls", Opt_PrintExplicitForalls, const Supported ),
+ ( "strictness", Opt_Strictness, const Supported ),
+ ( "static-argument-transformation", Opt_StaticArgumentTransformation, const Supported ),
+ ( "full-laziness", Opt_FullLaziness, const Supported ),
+ ( "liberate-case", Opt_LiberateCase, const Supported ),
+ ( "spec-constr", Opt_SpecConstr, const Supported ),
+ ( "cse", Opt_CSE, const Supported ),
+ ( "ignore-interface-pragmas", Opt_IgnoreInterfacePragmas, const Supported ),
+ ( "omit-interface-pragmas", Opt_OmitInterfacePragmas, const Supported ),
+ ( "do-lambda-eta-expansion", Opt_DoLambdaEtaExpansion, const Supported ),
+ ( "ignore-asserts", Opt_IgnoreAsserts, const Supported ),
+ ( "do-eta-reduction", Opt_DoEtaReduction, const Supported ),
+ ( "case-merge", Opt_CaseMerge, const Supported ),
+ ( "unbox-strict-fields", Opt_UnboxStrictFields, const Supported ),
+ ( "method-sharing", Opt_MethodSharing, const Supported ),
+ ( "dicts-cheap", Opt_DictsCheap, const Supported ),
+ ( "excess-precision", Opt_ExcessPrecision, const Supported ),
+ ( "asm-mangling", Opt_DoAsmMangling, const Supported ),
+ ( "print-bind-result", Opt_PrintBindResult, const Supported ),
+ ( "force-recomp", Opt_ForceRecomp, const Supported ),
+ ( "hpc-no-auto", Opt_Hpc_No_Auto, const Supported ),
+ ( "rewrite-rules", Opt_RewriteRules, const Supported ),
+ ( "break-on-exception", Opt_BreakOnException, const Supported ),
+ ( "break-on-error", Opt_BreakOnError, const Supported ),
+ ( "print-evld-with-show", Opt_PrintEvldWithShow, const Supported ),
+ ( "print-bind-contents", Opt_PrintBindContents, const Supported ),
+ ( "run-cps", Opt_RunCPSZ, const Supported ),
+ ( "convert-to-zipper-and-back", Opt_ConvertToZipCfgAndBack, const Supported ),
+ ( "vectorise", Opt_Vectorise, const Supported ),
+ ( "regs-graph", Opt_RegsGraph, const Supported ),
+ ( "regs-iterative", Opt_RegsIterative, const Supported ),
+ ( "th", Opt_TemplateHaskell,
+ deprecatedForLanguage "TemplateHaskell" ),
+ ( "fi", Opt_ForeignFunctionInterface,
+ deprecatedForLanguage "ForeignFunctionInterface" ),
+ ( "ffi", Opt_ForeignFunctionInterface,
+ deprecatedForLanguage "ForeignFunctionInterface" ),
+ ( "arrows", Opt_Arrows,
+ deprecatedForLanguage "Arrows" ),
+ ( "generics", Opt_Generics,
+ deprecatedForLanguage "Generics" ),
+ ( "implicit-prelude", Opt_ImplicitPrelude,
+ deprecatedForLanguage "ImplicitPrelude" ),
+ ( "bang-patterns", Opt_BangPatterns,
+ deprecatedForLanguage "BangPatterns" ),
+ ( "monomorphism-restriction", Opt_MonomorphismRestriction,
+ deprecatedForLanguage "MonomorphismRestriction" ),
+ ( "mono-pat-binds", Opt_MonoPatBinds,
+ deprecatedForLanguage "MonoPatBinds" ),
+ ( "extended-default-rules", Opt_ExtendedDefaultRules,
+ deprecatedForLanguage "ExtendedDefaultRules" ),
+ ( "implicit-params", Opt_ImplicitParams,
+ deprecatedForLanguage "ImplicitParams" ),
+ ( "scoped-type-variables", Opt_ScopedTypeVariables,
+ deprecatedForLanguage "ScopedTypeVariables" ),
+ ( "parr", Opt_PArr,
+ deprecatedForLanguage "PArr" ),
+ ( "allow-overlapping-instances", Opt_OverlappingInstances,
+ deprecatedForLanguage "OverlappingInstances" ),
+ ( "allow-undecidable-instances", Opt_UndecidableInstances,
+ deprecatedForLanguage "UndecidableInstances" ),
+ ( "allow-incoherent-instances", Opt_IncoherentInstances,
+ deprecatedForLanguage "IncoherentInstances" ),
+ ( "gen-manifest", Opt_GenManifest, const Supported ),
+ ( "embed-manifest", Opt_EmbedManifest, const Supported )
]
supportedLanguages :: [String]
-supportedLanguages = map fst xFlags
+supportedLanguages = [ name | (name, _, _) <- xFlags ]
+
+-- This may contain duplicates
+languageOptions :: [DynFlag]
+languageOptions = [ dynFlag | (_, dynFlag, _) <- xFlags ]
-- These -X<blah> flags can all be reversed with -XNo<blah>
-xFlags :: [(String, DynFlag)]
+xFlags :: [(String, DynFlag, Bool -> Deprecated)]
xFlags = [
- ( "CPP", Opt_Cpp ),
- ( "PatternGuards", Opt_PatternGuards ),
- ( "UnicodeSyntax", Opt_UnicodeSyntax ),
- ( "MagicHash", Opt_MagicHash ),
- ( "PolymorphicComponents", Opt_PolymorphicComponents ),
- ( "ExistentialQuantification", Opt_ExistentialQuantification ),
- ( "KindSignatures", Opt_KindSignatures ),
- ( "PatternSignatures", Opt_PatternSignatures ),
- ( "EmptyDataDecls", Opt_EmptyDataDecls ),
- ( "ParallelListComp", Opt_ParallelListComp ),
- ( "TransformListComp", Opt_TransformListComp ),
- ( "ForeignFunctionInterface", Opt_ForeignFunctionInterface ),
- ( "UnliftedFFITypes", Opt_UnliftedFFITypes ),
- ( "LiberalTypeSynonyms", Opt_LiberalTypeSynonyms ),
- ( "Rank2Types", Opt_Rank2Types ),
- ( "RankNTypes", Opt_RankNTypes ),
- ( "ImpredicativeTypes", Opt_ImpredicativeTypes ),
- ( "TypeOperators", Opt_TypeOperators ),
- ( "RecursiveDo", Opt_RecursiveDo ),
- ( "Arrows", Opt_Arrows ),
- ( "PArr", Opt_PArr ),
- ( "TemplateHaskell", Opt_TemplateHaskell ),
- ( "QuasiQuotes", Opt_QuasiQuotes ),
- ( "Generics", Opt_Generics ),
+ ( "CPP", Opt_Cpp, const Supported ),
+ ( "PatternGuards", Opt_PatternGuards, const Supported ),
+ ( "UnicodeSyntax", Opt_UnicodeSyntax, const Supported ),
+ ( "MagicHash", Opt_MagicHash, const Supported ),
+ ( "PolymorphicComponents", Opt_PolymorphicComponents, const Supported ),
+ ( "ExistentialQuantification", Opt_ExistentialQuantification, const Supported ),
+ ( "KindSignatures", Opt_KindSignatures, const Supported ),
+ ( "PatternSignatures", Opt_PatternSignatures, const Supported ),
+ ( "EmptyDataDecls", Opt_EmptyDataDecls, const Supported ),
+ ( "ParallelListComp", Opt_ParallelListComp, const Supported ),
+ ( "TransformListComp", Opt_TransformListComp, const Supported ),
+ ( "ForeignFunctionInterface", Opt_ForeignFunctionInterface, const Supported ),
+ ( "UnliftedFFITypes", Opt_UnliftedFFITypes, const Supported ),
+ ( "LiberalTypeSynonyms", Opt_LiberalTypeSynonyms, const Supported ),
+ ( "Rank2Types", Opt_Rank2Types, const Supported ),
+ ( "RankNTypes", Opt_RankNTypes, const Supported ),
+ ( "ImpredicativeTypes", Opt_ImpredicativeTypes, const Supported ),
+ ( "TypeOperators", Opt_TypeOperators, const Supported ),
+ ( "RecursiveDo", Opt_RecursiveDo, const Supported ),
+ ( "Arrows", Opt_Arrows, const Supported ),
+ ( "PArr", Opt_PArr, const Supported ),
+ ( "TemplateHaskell", Opt_TemplateHaskell, const Supported ),
+ ( "QuasiQuotes", Opt_QuasiQuotes, const Supported ),
+ ( "Generics", Opt_Generics, const Supported ),
-- On by default:
- ( "ImplicitPrelude", Opt_ImplicitPrelude ),
- ( "RecordWildCards", Opt_RecordWildCards ),
- ( "RecordPuns", Opt_RecordPuns ),
- ( "DisambiguateRecordFields", Opt_DisambiguateRecordFields ),
- ( "OverloadedStrings", Opt_OverloadedStrings ),
- ( "GADTs", Opt_GADTs ),
- ( "ViewPatterns", Opt_ViewPatterns),
- ( "TypeFamilies", Opt_TypeFamilies ),
- ( "BangPatterns", Opt_BangPatterns ),
+ ( "ImplicitPrelude", Opt_ImplicitPrelude, const Supported ),
+ ( "RecordWildCards", Opt_RecordWildCards, const Supported ),
+ ( "NamedFieldPuns", Opt_RecordPuns, const Supported ),
+ ( "RecordPuns", Opt_RecordPuns,
+ deprecatedForLanguage "NamedFieldPuns" ),
+ ( "DisambiguateRecordFields", Opt_DisambiguateRecordFields, const Supported ),
+ ( "OverloadedStrings", Opt_OverloadedStrings, const Supported ),
+ ( "GADTs", Opt_GADTs, const Supported ),
+ ( "ViewPatterns", Opt_ViewPatterns, const Supported ),
+ ( "TypeFamilies", Opt_TypeFamilies, const Supported ),
+ ( "BangPatterns", Opt_BangPatterns, const Supported ),
-- On by default:
- ( "MonomorphismRestriction", Opt_MonomorphismRestriction ),
+ ( "MonomorphismRestriction", Opt_MonomorphismRestriction, const Supported ),
-- On by default (which is not strictly H98):
- ( "MonoPatBinds", Opt_MonoPatBinds ),
- ( "RelaxedPolyRec", Opt_RelaxedPolyRec),
- ( "ExtendedDefaultRules", Opt_ExtendedDefaultRules ),
- ( "ImplicitParams", Opt_ImplicitParams ),
- ( "ScopedTypeVariables", Opt_ScopedTypeVariables ),
- ( "UnboxedTuples", Opt_UnboxedTuples ),
- ( "StandaloneDeriving", Opt_StandaloneDeriving ),
- ( "DeriveDataTypeable", Opt_DeriveDataTypeable ),
- ( "TypeSynonymInstances", Opt_TypeSynonymInstances ),
- ( "FlexibleContexts", Opt_FlexibleContexts ),
- ( "FlexibleInstances", Opt_FlexibleInstances ),
- ( "ConstrainedClassMethods", Opt_ConstrainedClassMethods ),
- ( "MultiParamTypeClasses", Opt_MultiParamTypeClasses ),
- ( "FunctionalDependencies", Opt_FunctionalDependencies ),
- ( "GeneralizedNewtypeDeriving", Opt_GeneralizedNewtypeDeriving ),
- ( "OverlappingInstances", Opt_OverlappingInstances ),
- ( "UndecidableInstances", Opt_UndecidableInstances ),
- ( "IncoherentInstances", Opt_IncoherentInstances )
+ ( "MonoPatBinds", Opt_MonoPatBinds, const Supported ),
+ ( "RelaxedPolyRec", Opt_RelaxedPolyRec, const Supported ),
+ ( "ExtendedDefaultRules", Opt_ExtendedDefaultRules, const Supported ),
+ ( "ImplicitParams", Opt_ImplicitParams, const Supported ),
+ ( "ScopedTypeVariables", Opt_ScopedTypeVariables, const Supported ),
+ ( "UnboxedTuples", Opt_UnboxedTuples, const Supported ),
+ ( "StandaloneDeriving", Opt_StandaloneDeriving, const Supported ),
+ ( "DeriveDataTypeable", Opt_DeriveDataTypeable, const Supported ),
+ ( "TypeSynonymInstances", Opt_TypeSynonymInstances, const Supported ),
+ ( "FlexibleContexts", Opt_FlexibleContexts, const Supported ),
+ ( "FlexibleInstances", Opt_FlexibleInstances, const Supported ),
+ ( "ConstrainedClassMethods", Opt_ConstrainedClassMethods, const Supported ),
+ ( "MultiParamTypeClasses", Opt_MultiParamTypeClasses, const Supported ),
+ ( "FunctionalDependencies", Opt_FunctionalDependencies, const Supported ),
+ ( "GeneralizedNewtypeDeriving", Opt_GeneralizedNewtypeDeriving, const Supported ),
+ ( "OverlappingInstances", Opt_OverlappingInstances, const Supported ),
+ ( "UndecidableInstances", Opt_UndecidableInstances, const Supported ),
+ ( "IncoherentInstances", Opt_IncoherentInstances, const Supported )
]
impliedFlags :: [(DynFlag, [DynFlag])]
, Opt_GeneralizedNewtypeDeriving
, Opt_TypeFamilies ]
-------------------
-isFlag :: [(String,a)] -> String -> Bool
-isFlag flags f = any (\(ff,_) -> ff == f) flags
-
-isPrefFlag :: String -> [(String,a)] -> String -> Bool
-isPrefFlag pref flags no_f
- | Just f <- maybePrefixMatch pref no_f = isFlag flags f
- | otherwise = False
-
-------------------
-getFlag :: [(String,a)] -> String -> a
-getFlag flags f = case [ opt | (ff, opt) <- flags, ff == f] of
- (o:_) -> o
- [] -> panic ("get_flag " ++ f)
-
-getPrefFlag :: String -> [(String,a)] -> String -> a
-getPrefFlag pref flags f = getFlag flags (fromJust (maybePrefixMatch pref f))
--- We should only be passed flags which match the prefix
-
-- -----------------------------------------------------------------------------
-- Parsing the dynamic flags.