diff options
author | David Terei <code@davidterei.com> | 2014-11-19 18:02:30 -0800 |
---|---|---|
committer | David Terei <code@davidterei.com> | 2014-11-21 13:03:38 -0800 |
commit | 5f84bd1d6d08e20c254227fd2f72578b751addbe (patch) | |
tree | db536ab691a4ecfa89e0bf3248a7e16916d691df | |
parent | 453ce626a32cab3728a640b2299eaeeb30da8862 (diff) | |
download | haskell-5f84bd1d6d08e20c254227fd2f72578b751addbe.tar.gz |
Improve Safe Haskell bounds for changes to base over time
-rw-r--r-- | libraries/base/Control/Concurrent/QSem.hs | 2 | ||||
-rw-r--r-- | libraries/base/Control/Concurrent/QSemN.hs | 2 | ||||
-rw-r--r-- | libraries/base/Data/Bifunctor.hs | 4 | ||||
-rw-r--r-- | libraries/base/Data/Data.hs | 7 | ||||
-rw-r--r-- | libraries/base/Data/Type/Bool.hs | 3 | ||||
-rw-r--r-- | libraries/base/Data/Version.hs | 9 | ||||
-rw-r--r-- | libraries/base/GHC/Char.hs | 2 | ||||
-rw-r--r-- | libraries/base/GHC/Event/Control.hs | 2 | ||||
-rw-r--r-- | libraries/base/GHC/Fingerprint.hs-boot | 2 | ||||
-rw-r--r-- | libraries/base/GHC/IO/Encoding/CodePage/API.hs | 1 | ||||
-rw-r--r-- | libraries/base/GHC/IP.hs | 1 | ||||
-rw-r--r-- | libraries/base/GHC/Profiling.hs | 1 | ||||
-rw-r--r-- | libraries/base/GHC/Stack.hsc | 2 | ||||
-rw-r--r-- | libraries/base/GHC/TypeLits.hs | 1 | ||||
-rw-r--r-- | libraries/base/System/Timeout.hs | 2 | ||||
-rw-r--r-- | testsuite/tests/safeHaskell/unsafeLibs/BadImport05.hs | 12 | ||||
-rw-r--r-- | testsuite/tests/safeHaskell/unsafeLibs/BadImport05.stderr | 4 | ||||
-rw-r--r-- | testsuite/tests/safeHaskell/unsafeLibs/GoodImport02.hs | 10 | ||||
-rw-r--r-- | testsuite/tests/safeHaskell/unsafeLibs/GoodImport03.hs | 49 | ||||
-rw-r--r-- | testsuite/tests/safeHaskell/unsafeLibs/all.T | 1 |
20 files changed, 58 insertions, 59 deletions
diff --git a/libraries/base/Control/Concurrent/QSem.hs b/libraries/base/Control/Concurrent/QSem.hs index 223d86539d..e20c737fdb 100644 --- a/libraries/base/Control/Concurrent/QSem.hs +++ b/libraries/base/Control/Concurrent/QSem.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE Trustworthy #-} +{-# LANGUAGE Safe #-} {-# LANGUAGE AutoDeriveTypeable, BangPatterns #-} {-# OPTIONS_GHC -funbox-strict-fields #-} diff --git a/libraries/base/Control/Concurrent/QSemN.hs b/libraries/base/Control/Concurrent/QSemN.hs index a377e5e804..bd520cf40d 100644 --- a/libraries/base/Control/Concurrent/QSemN.hs +++ b/libraries/base/Control/Concurrent/QSemN.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE Trustworthy #-} +{-# LANGUAGE Safe #-} {-# LANGUAGE AutoDeriveTypeable, BangPatterns #-} {-# OPTIONS_GHC -funbox-strict-fields #-} diff --git a/libraries/base/Data/Bifunctor.hs b/libraries/base/Data/Bifunctor.hs index 4c84f1cee1..2e31ad5691 100644 --- a/libraries/base/Data/Bifunctor.hs +++ b/libraries/base/Data/Bifunctor.hs @@ -1,5 +1,5 @@ +{-# LANGUAGE Safe #-} {-# LANGUAGE CPP #-} -{-# LANGUAGE NoImplicitPrelude #-} ----------------------------------------------------------------------------- -- | @@ -18,8 +18,6 @@ module Data.Bifunctor ) where import Control.Applicative ( Const(..) ) -import Data.Either ( Either(..) ) -import GHC.Base ( (.), id ) -- | Formally, the class 'Bifunctor' represents a bifunctor -- from @Hask@ -> @Hask@. diff --git a/libraries/base/Data/Data.hs b/libraries/base/Data/Data.hs index 4aa785b3b8..8f1e5f4735 100644 --- a/libraries/base/Data/Data.hs +++ b/libraries/base/Data/Data.hs @@ -1,7 +1,6 @@ -{-# LANGUAGE Trustworthy, FlexibleInstances #-} -{-# LANGUAGE RankNTypes, ScopedTypeVariables, PolyKinds #-} -{-# LANGUAGE StandaloneDeriving, AutoDeriveTypeable, TypeOperators, - GADTs #-} +{-# LANGUAGE Trustworthy #-} +{-# LANGUAGE RankNTypes, ScopedTypeVariables, PolyKinds, StandaloneDeriving, + AutoDeriveTypeable, TypeOperators, GADTs, FlexibleInstances #-} {-# LANGUAGE NoImplicitPrelude #-} ----------------------------------------------------------------------------- diff --git a/libraries/base/Data/Type/Bool.hs b/libraries/base/Data/Type/Bool.hs index 705db9eb28..8a80455610 100644 --- a/libraries/base/Data/Type/Bool.hs +++ b/libraries/base/Data/Type/Bool.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE Safe #-} {-# LANGUAGE TypeFamilies, TypeOperators, DataKinds, NoImplicitPrelude, PolyKinds #-} @@ -53,4 +54,4 @@ type family Not a where Not False = True Not True = False -
\ No newline at end of file + diff --git a/libraries/base/Data/Version.hs b/libraries/base/Data/Version.hs index fdf01d1af9..8a0f9c8f23 100644 --- a/libraries/base/Data/Version.hs +++ b/libraries/base/Data/Version.hs @@ -1,6 +1,6 @@ +{-# LANGUAGE Safe #-} {-# LANGUAGE AutoDeriveTypeable #-} {-# LANGUAGE NoImplicitPrelude #-} -{-# LANGUAGE Trustworthy #-} ----------------------------------------------------------------------------- -- | @@ -34,12 +34,15 @@ module Data.Version ( showVersion, parseVersion, ) where +import Control.Monad ( Monad(..), liftM ) +import Data.Bool ( (&&) ) import Data.Char ( isDigit, isAlphaNum ) import Data.Eq +import Data.Int ( Int ) import Data.List import Data.Ord +import Data.String ( String ) import Data.Typeable ( Typeable ) -import GHC.Base ( ($), (&&), Monad(..), String, Int, liftM ) import GHC.Read import GHC.Show import Text.ParserCombinators.ReadP @@ -113,6 +116,6 @@ showVersion (Version branch tags) -- | A parser for versions in the format produced by 'showVersion'. -- parseVersion :: ReadP Version -parseVersion = do branch <- sepBy1 (liftM read $ munch1 isDigit) (char '.') +parseVersion = do branch <- sepBy1 (liftM read (munch1 isDigit)) (char '.') tags <- many (char '-' >> munch1 isAlphaNum) return Version{versionBranch=branch, versionTags=tags} diff --git a/libraries/base/GHC/Char.hs b/libraries/base/GHC/Char.hs index 2db18c6c1d..4928f21e96 100644 --- a/libraries/base/GHC/Char.hs +++ b/libraries/base/GHC/Char.hs @@ -1,4 +1,4 @@ - +{-# LANGUAGE Trustworthy #-} {-# LANGUAGE NoImplicitPrelude, MagicHash #-} module GHC.Char (chr) where diff --git a/libraries/base/GHC/Event/Control.hs b/libraries/base/GHC/Event/Control.hs index 747a416343..93590ecfb0 100644 --- a/libraries/base/GHC/Event/Control.hs +++ b/libraries/base/GHC/Event/Control.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE Unsafe #-} +{-# LANGUAGE Trustworthy #-} {-# LANGUAGE CPP , NoImplicitPrelude , ScopedTypeVariables diff --git a/libraries/base/GHC/Fingerprint.hs-boot b/libraries/base/GHC/Fingerprint.hs-boot index 36833b8ed2..479c1aff17 100644 --- a/libraries/base/GHC/Fingerprint.hs-boot +++ b/libraries/base/GHC/Fingerprint.hs-boot @@ -1,4 +1,4 @@ -{-# LANGUAGE Unsafe #-} +{-# LANGUAGE Trustworthy #-} {-# LANGUAGE NoImplicitPrelude #-} module GHC.Fingerprint ( fingerprintString, diff --git a/libraries/base/GHC/IO/Encoding/CodePage/API.hs b/libraries/base/GHC/IO/Encoding/CodePage/API.hs index fc915ecf56..182f05d45d 100644 --- a/libraries/base/GHC/IO/Encoding/CodePage/API.hs +++ b/libraries/base/GHC/IO/Encoding/CodePage/API.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE Trustworthy #-} {-# LANGUAGE CPP, NoImplicitPrelude, NondecreasingIndentation, RecordWildCards, ScopedTypeVariables #-} {-# OPTIONS_GHC -fno-warn-name-shadowing #-} module GHC.IO.Encoding.CodePage.API ( diff --git a/libraries/base/GHC/IP.hs b/libraries/base/GHC/IP.hs index 95b00c15ff..b80ee4b3fb 100644 --- a/libraries/base/GHC/IP.hs +++ b/libraries/base/GHC/IP.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE Safe #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE KindSignatures #-} diff --git a/libraries/base/GHC/Profiling.hs b/libraries/base/GHC/Profiling.hs index 0bedcb18fa..281d9b10d1 100644 --- a/libraries/base/GHC/Profiling.hs +++ b/libraries/base/GHC/Profiling.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE Trustworthy #-} {-# LANGUAGE NoImplicitPrelude #-} -- | /Since: 4.7.0.0/ diff --git a/libraries/base/GHC/Stack.hsc b/libraries/base/GHC/Stack.hsc index edd0f4f1bc..611e5c9ba6 100644 --- a/libraries/base/GHC/Stack.hsc +++ b/libraries/base/GHC/Stack.hsc @@ -1,3 +1,5 @@ +{-# LANGUAGE Trustworthy #-} + ----------------------------------------------------------------------------- -- | -- Module : GHC.Stack diff --git a/libraries/base/GHC/TypeLits.hs b/libraries/base/GHC/TypeLits.hs index cd404f1f19..8c74481de7 100644 --- a/libraries/base/GHC/TypeLits.hs +++ b/libraries/base/GHC/TypeLits.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE Trustworthy #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE TypeFamilies #-} diff --git a/libraries/base/System/Timeout.hs b/libraries/base/System/Timeout.hs index 322a842392..73b5910360 100644 --- a/libraries/base/System/Timeout.hs +++ b/libraries/base/System/Timeout.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE Trustworthy #-} +{-# LANGUAGE Safe #-} {-# LANGUAGE CPP #-} {-# LANGUAGE AutoDeriveTypeable, StandaloneDeriving #-} diff --git a/testsuite/tests/safeHaskell/unsafeLibs/BadImport05.hs b/testsuite/tests/safeHaskell/unsafeLibs/BadImport05.hs deleted file mode 100644 index c6d63842c2..0000000000 --- a/testsuite/tests/safeHaskell/unsafeLibs/BadImport05.hs +++ /dev/null @@ -1,12 +0,0 @@ -{-# LANGUAGE Safe #-} --- | Import unsafe module Foreign.Unsafe to make sure it fails -module Main where - -import System.IO.Unsafe (unsafePerformIO) - -f :: Int -f = unsafePerformIO $ putStrLn "What kind of swallow?" >> return 2 - -main :: IO () -main = putStrLn $ "X is: " ++ show f - diff --git a/testsuite/tests/safeHaskell/unsafeLibs/BadImport05.stderr b/testsuite/tests/safeHaskell/unsafeLibs/BadImport05.stderr deleted file mode 100644 index 32a42f59d9..0000000000 --- a/testsuite/tests/safeHaskell/unsafeLibs/BadImport05.stderr +++ /dev/null @@ -1,4 +0,0 @@ - -BadImport05.hs:5:1: - System.IO.Unsafe: Can't be safely imported! - The module itself isn't safe. diff --git a/testsuite/tests/safeHaskell/unsafeLibs/GoodImport02.hs b/testsuite/tests/safeHaskell/unsafeLibs/GoodImport02.hs index 85a781f982..86c34adb0d 100644 --- a/testsuite/tests/safeHaskell/unsafeLibs/GoodImport02.hs +++ b/testsuite/tests/safeHaskell/unsafeLibs/GoodImport02.hs @@ -1,11 +1,11 @@ {-# LANGUAGE Safe #-} --- | Import safe versions of unsafe modules from prelude +-- | Import (now safe by default) modules. module Main where -import Control.Monad.ST.Safe -import Control.Monad.ST.Lazy.Safe -import Foreign.ForeignPtr.Safe -import Foreign.Safe +import Control.Monad.ST +import Control.Monad.ST.Lazy +import Foreign.ForeignPtr +import Foreign f :: Int f = 2 diff --git a/testsuite/tests/safeHaskell/unsafeLibs/GoodImport03.hs b/testsuite/tests/safeHaskell/unsafeLibs/GoodImport03.hs index 6533e18b7d..30da9f5ab2 100644 --- a/testsuite/tests/safeHaskell/unsafeLibs/GoodImport03.hs +++ b/testsuite/tests/safeHaskell/unsafeLibs/GoodImport03.hs @@ -1,39 +1,47 @@ {-# LANGUAGE Safe #-} +{-# OPTIONS_GHC -fno-warn-deprecations #-} -- | Import all modules from prelude that should be safe module Main where import Numeric import Prelude --- import Foreign import Control.Applicative import Control.Arrow import Control.Category --- import Control.ST --- import Control.ST.Lazy --- import Control.ST.Strict - import Control.Concurrent import Control.Concurrent.Chan import Control.Concurrent.MVar +import Control.Concurrent.QSem +import Control.Concurrent.QSemN import Control.Exception import Control.Exception.Base import Control.Monad import Control.Monad.Fix +import Control.Monad.Instances import Control.Monad.Zip +import Control.Monad.ST +import Control.Monad.ST.Lazy +import Control.Monad.ST.Strict + +import Data.Bifunctor import Data.Bits import Data.Bool import Data.Char +-- import Data.Coerce import Data.Complex +import Data.Data +import Data.Dynamic import Data.Either import Data.Eq import Data.Fixed import Data.Foldable import Data.Function +import Data.Functor.Identity import Data.Functor import Data.IORef import Data.Int @@ -42,11 +50,13 @@ import Data.List import Data.Maybe import Data.Monoid import Data.Ord +import Data.Proxy import Data.Ratio import Data.String import Data.Traversable import Data.Tuple import Data.Typeable +-- import Data.Typeable.Internal import Data.Unique import Data.Version import Data.Word @@ -55,10 +65,16 @@ import Data.STRef import Data.STRef.Lazy import Data.STRef.Strict +import Data.Type.Bool +-- import Data.Type.Coercion +-- import Data.Type.Equality + -- import Debug.Trace +import Foreign + import Foreign.Concurrent --- import Foreign.ForeignPtr +import Foreign.ForeignPtr import Foreign.Ptr import Foreign.StablePtr import Foreign.Storable @@ -68,7 +84,7 @@ import Foreign.C.Error import Foreign.C.String import Foreign.C.Types --- import Foreign.Marshal +import Foreign.Marshal import Foreign.Marshal.Alloc import Foreign.Marshal.Array import Foreign.Marshal.Error @@ -76,34 +92,27 @@ import Foreign.Marshal.Pool import Foreign.Marshal.Utils import System.CPUTime +import System.Console.GetOpt import System.Environment import System.Exit -import System.Info -import System.Mem -import System.Timeout - -import System.Console.GetOpt - import System.IO import System.IO.Error - +import System.Info +import System.Mem import System.Mem.StableName import System.Mem.Weak - import System.Posix.Internals import System.Posix.Types +import System.Timeout +import Text.ParserCombinators.ReadP +import Text.ParserCombinators.ReadPrec import Text.Printf - import Text.Read import Text.Read.Lex - import Text.Show import Text.Show.Functions -import Text.ParserCombinators.ReadP -import Text.ParserCombinators.ReadPrec - -- import Unsafe.Coerce f :: Int diff --git a/testsuite/tests/safeHaskell/unsafeLibs/all.T b/testsuite/tests/safeHaskell/unsafeLibs/all.T index 03ca0e4d18..8bcda5f402 100644 --- a/testsuite/tests/safeHaskell/unsafeLibs/all.T +++ b/testsuite/tests/safeHaskell/unsafeLibs/all.T @@ -19,7 +19,6 @@ test('Dep10', normal, compile_fail, ['']) # check unsafe modules are marked unsafe test('BadImport01', normal, compile_fail, ['']) -test('BadImport05', normal, compile_fail, ['']) test('BadImport06', normal, compile_fail, ['']) test('BadImport07', normal, compile_fail, ['']) test('BadImport08', normal, compile_fail, ['']) |