T4437.hs 2.44 KB
Newer Older
1 2 3

module Main (main) where

4
import Control.Monad
5 6 7 8 9
import Data.List
import DynFlags
import Language.Haskell.Extension

main :: IO ()
10
main = do
dterei's avatar
dterei committed
11
    let ghcExtensions = [ ext | (ext, _, _) <- xFlags ]
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
        cabalExtensions = map show [ toEnum 0 :: KnownExtension .. ]
        ghcOnlyExtensions = ghcExtensions \\ cabalExtensions
        cabalOnlyExtensions = cabalExtensions \\ ghcExtensions
    check "GHC-only flags" expectedGhcOnlyExtensions ghcOnlyExtensions
    check "Cabal-only flags" expectedCabalOnlyExtensions cabalOnlyExtensions

check :: String -> [String] -> [String] -> IO ()
check title expected got
    = do let unexpected = got \\ expected
             missing = expected \\ got
             showProblems problemType problems
                 = unless (null problems) $
                       do putStrLn (title ++ ": " ++ problemType)
                          putStrLn "-----"
                          mapM_ putStrLn problems
                          putStrLn "-----"
                          putStrLn ""
         showProblems "Unexpected flags" unexpected
         showProblems "Missing flags" missing

expectedGhcOnlyExtensions :: [String]
expectedGhcOnlyExtensions = ["ParallelArrays",
                             "RelaxedLayout",
                             "DeriveGeneric",
                             "DefaultSignatures",
                             "InterruptibleFFI",
                             "AlternativeLayoutRule",
                             "AlternativeLayoutRuleTransitional",
                             "MonadComprehensions",
dreixel's avatar
dreixel committed
41
                             "TraditionalRecordSyntax",
dreixel's avatar
dreixel committed
42
                             "DataKinds",
Ian Lynagh's avatar
Ian Lynagh committed
43
                             "PolyKinds",
44
                             "ExplicitNamespaces",
45
                             "InstanceSigs",
46 47
                             "CApiFFI",
                             "LambdaCase",
48 49
                             "MultiWayIf",
                             "TypeHoles"]
50 51 52 53 54 55 56 57 58 59 60 61

expectedCabalOnlyExtensions :: [String]
expectedCabalOnlyExtensions = ["Generics",
                               "ExtensibleRecords",
                               "RestrictedTypeSynonyms",
                               "HereDocuments",
                               "NewQualifiedOperators",
                               "XmlSyntax",
                               "RegularPatterns",
                               "SafeImports",
                               "Safe",
                               "Trustworthy"]
62