{-# LANGUAGE CPP #-} module Mueval.Context ( cleanModules, defaultModules, defaultPackages, qualifiedModules, ) where ----------------------------------------------------------------------------- -- | Return false if any of the listed modules cannot be found in the whitelist. cleanModules :: [String] -> Bool cleanModules = all (`elem` defaultModules) {- | Modules which we should load by default. These are of course whitelisted. Specifically, we want the Prelude because otherwise things are horribly crippled; we want SimpleReflect so we can do neat things (for said neat things, see ); and we want ShowFun to neuter IO stuff even more. The rest should be safe to import without clashes, according to the Lambdabot sources. -} defaultModules :: [String] defaultModules = ["Prelude", "ShowFun", "Debug.SimpleReflect", "Data.Function", "Control.Applicative", "Control.Arrow", "Control.Monad", "Control.Monad.Cont", #if __GLASGOW_HASKELL__ >= 710 "Control.Monad.Except", #else "Control.Monad.Error", #endif "Control.Monad.Fix", "Control.Monad.Identity", #if !MIN_VERSION_base(4,7,0) "Control.Monad.Instances", #endif "Control.Monad.RWS", "Control.Monad.Reader", "Control.Monad.State", "Control.Monad.State", "Control.Monad.Writer", "Data.Array", "Data.Bits", "Data.Bool", "Data.Char", "Data.Complex", "Data.Dynamic", "Data.Either", "Data.Eq", "Data.Fixed", "Data.Graph", "Data.Int", "Data.Ix", "Data.List", "Data.Maybe", "Data.Monoid", {- -- Commented out because they are not necessarily available. If anyone misses -- them, perhaps we could look into forcing a dependency on them in the Cabal -- file or perhaps enable them via a CLI flag. For now, we'll stash them in a comment. "Control.Parallel", "Control.Parallel.Strategies", "Data.Number.BigFloat", "Data.Number.CReal", "Data.Number.Dif", "Data.Number.Fixed", "Data.Number.Interval", "Data.Number.Natural", "Data.Number.Symbolic", "Math.OEIS", -} "Data.Ord", "Data.Ratio", "Data.Tree", "Data.Tuple", "Data.Typeable", "Data.Word", "System.Random", "Test.QuickCheck", "Text.PrettyPrint.HughesPJ", "Text.Printf"] defaultPackages :: [String] defaultPackages = [ "array" , "base" , "bytestring" , "containers" ] {- | Borrowed from Lambdabot, this is the whitelist of modules which should be safe to import functions from, but which we don't want to import by default. FIXME: make these qualified imports. The GHC API & Hint currently do not support qualified imports. WARNING: You can import these with --module, certainly, but the onus is on the user to make sure they fully disambiguate function names; ie: > mueval --module Data.Map -e "Prelude.map (+1) [1..100]" -} qualifiedModules :: [(String, Maybe String)] qualifiedModules = [ -- ("Control.Arrow.Transformer", Just "AT"), -- ("Control.Arrow.Transformer.All", Just "AT"), ("Data.ByteString", Just "BS"), ("Data.ByteString.Char8", Just "BSC"), ("Data.ByteString.Lazy", Just "BSL"), ("Data.ByteString.Lazy.Char8", Just "BSLC"), ("Data.Foldable", Just "Data.Foldable"), -- ("Data.Generics", Just "Data.Generics"), ("Data.IntMap", Just "IM"), ("Data.IntSet", Just "IS"), ("Data.Map", Just "M"), ("Data.Sequence", Just "Data.Sequence"), ("Data.Set", Just "S"), ("Data.Traversable", Just "Data.Traversable") ]