summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Terei <code@davidterei.com>2014-11-19 18:02:30 -0800
committerDavid Terei <code@davidterei.com>2014-11-21 13:03:38 -0800
commit5f84bd1d6d08e20c254227fd2f72578b751addbe (patch)
treedb536ab691a4ecfa89e0bf3248a7e16916d691df
parent453ce626a32cab3728a640b2299eaeeb30da8862 (diff)
downloadhaskell-5f84bd1d6d08e20c254227fd2f72578b751addbe.tar.gz
Improve Safe Haskell bounds for changes to base over time
-rw-r--r--libraries/base/Control/Concurrent/QSem.hs2
-rw-r--r--libraries/base/Control/Concurrent/QSemN.hs2
-rw-r--r--libraries/base/Data/Bifunctor.hs4
-rw-r--r--libraries/base/Data/Data.hs7
-rw-r--r--libraries/base/Data/Type/Bool.hs3
-rw-r--r--libraries/base/Data/Version.hs9
-rw-r--r--libraries/base/GHC/Char.hs2
-rw-r--r--libraries/base/GHC/Event/Control.hs2
-rw-r--r--libraries/base/GHC/Fingerprint.hs-boot2
-rw-r--r--libraries/base/GHC/IO/Encoding/CodePage/API.hs1
-rw-r--r--libraries/base/GHC/IP.hs1
-rw-r--r--libraries/base/GHC/Profiling.hs1
-rw-r--r--libraries/base/GHC/Stack.hsc2
-rw-r--r--libraries/base/GHC/TypeLits.hs1
-rw-r--r--libraries/base/System/Timeout.hs2
-rw-r--r--testsuite/tests/safeHaskell/unsafeLibs/BadImport05.hs12
-rw-r--r--testsuite/tests/safeHaskell/unsafeLibs/BadImport05.stderr4
-rw-r--r--testsuite/tests/safeHaskell/unsafeLibs/GoodImport02.hs10
-rw-r--r--testsuite/tests/safeHaskell/unsafeLibs/GoodImport03.hs49
-rw-r--r--testsuite/tests/safeHaskell/unsafeLibs/all.T1
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, [''])