summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libraries/base/Data/List/NonEmpty.hs9
-rw-r--r--libraries/base/GHC/Err.hs16
-rw-r--r--libraries/base/GHC/List.hs41
-rw-r--r--libraries/base/changelog.md4
-rw-r--r--testsuite/tests/ghci.debugger/scripts/break009.stdout5
-rw-r--r--testsuite/tests/ghci.debugger/scripts/print027.stdout4
-rw-r--r--testsuite/tests/ghci/scripts/T10501.stderr5
-rw-r--r--testsuite/tests/plugins/test-hole-plugin.stderr8
-rw-r--r--testsuite/tests/simplCore/should_compile/T20103.stderr76
-rw-r--r--testsuite/tests/th/TH_exn2.stderr4
-rw-r--r--testsuite/tests/typecheck/should_compile/abstract_refinement_hole_fits.stderr28
-rw-r--r--testsuite/tests/typecheck/should_compile/constraint_hole_fits.stderr12
-rw-r--r--testsuite/tests/typecheck/should_compile/holes.stderr12
-rw-r--r--testsuite/tests/typecheck/should_compile/holes3.stderr12
-rw-r--r--testsuite/tests/typecheck/should_compile/refinement_hole_fits.stderr20
15 files changed, 170 insertions, 86 deletions
diff --git a/libraries/base/Data/List/NonEmpty.hs b/libraries/base/Data/List/NonEmpty.hs
index 84e909a25a..c2689ce662 100644
--- a/libraries/base/Data/List/NonEmpty.hs
+++ b/libraries/base/Data/List/NonEmpty.hs
@@ -110,6 +110,7 @@ import Data.Function (on)
import qualified Data.List as List
import Data.Ord (comparing)
import GHC.Base (NonEmpty(..))
+import GHC.Stack.Types (HasCallStack)
infixr 5 <|
@@ -194,9 +195,9 @@ sort = lift List.sort
-- | Converts a normal list to a 'NonEmpty' stream.
--
-- Raises an error if given an empty list.
-fromList :: [a] -> NonEmpty a
+fromList :: HasCallStack => [a] -> NonEmpty a
fromList (a:as) = a :| as
-fromList [] = errorWithoutStackTrace "NonEmpty.fromList: empty list"
+fromList [] = error "NonEmpty.fromList: empty list"
-- | Convert a stream to a normal list efficiently.
toList :: NonEmpty a -> [a]
@@ -401,11 +402,11 @@ isPrefixOf (y:ys) (x :| xs) = (y == x) && List.isPrefixOf ys xs
-- @n@. Note that the head of the stream has index 0.
--
-- /Beware/: a negative or out-of-bounds index will cause an error.
-(!!) :: NonEmpty a -> Int -> a
+(!!) :: HasCallStack => NonEmpty a -> Int -> a
(!!) ~(x :| xs) n
| n == 0 = x
| n > 0 = xs List.!! (n - 1)
- | otherwise = errorWithoutStackTrace "NonEmpty.!! negative argument"
+ | otherwise = error "NonEmpty.!! negative index"
infixl 9 !!
-- | The 'zip' function takes two streams and returns a stream of
diff --git a/libraries/base/GHC/Err.hs b/libraries/base/GHC/Err.hs
index 07d263bf7d..c3e21eeee2 100644
--- a/libraries/base/GHC/Err.hs
+++ b/libraries/base/GHC/Err.hs
@@ -54,16 +54,12 @@ errorWithoutStackTrace s = raise# (errorCallException s)
-- a partial stack trace, containing the call-site of each function
-- with a HasCallStack constraint.
--
--- In base, however, the only functions that have such constraints are
--- error and undefined, so the stack traces from partial functions in
--- base will never contain a call-site in user code. Instead we'll
--- usually just get the actual call to error. Base functions already
--- have a good habit of providing detailed error messages, including the
--- name of the offending partial function, so the partial stack-trace
--- does not provide any extra information, just noise. Thus, we export
--- the callstack-aware error, but within base we use the
--- errorWithoutStackTrace variant for more hygienic error messages.
-
+-- In base, error and undefined were the only functions that had such
+-- constraint. Errors like "Prelude.!!: negative index" are good, yet if the
+-- code base contains dozens of !! applications (including dependencies,
+-- which code is not as easily accessible), pinpointing the bad call is
+-- where the stack trace would help. Therefore we annotate most calls to
+-- error, so users have a chance to get a better idea.
-- | A special case of 'error'.
-- It is expected that compilers will recognize this and insert error
diff --git a/libraries/base/GHC/List.hs b/libraries/base/GHC/List.hs
index 3408538568..677d0fe7c1 100644
--- a/libraries/base/GHC/List.hs
+++ b/libraries/base/GHC/List.hs
@@ -42,6 +42,7 @@ import Data.Maybe
import GHC.Base
import GHC.Num (Num(..))
import GHC.Num.Integer (Integer)
+import GHC.Stack.Types (HasCallStack)
infixl 9 !!
infix 4 `elem`, `notElem`
@@ -72,12 +73,12 @@ infix 4 `elem`, `notElem`
--
-- WARNING: This function is partial. You can use case-matching, 'uncons' or
-- 'listToMaybe' instead.
-head :: [a] -> a
+head :: HasCallStack => [a] -> a
head (x:_) = x
head [] = badHead
{-# NOINLINE [1] head #-}
-badHead :: a
+badHead :: HasCallStack => a
badHead = errorEmptyList "head"
-- This rule is useful in cases like
@@ -119,7 +120,7 @@ uncons (x:xs) = Just (x, xs)
--
-- WARNING: This function is partial. You can use case-matching or 'uncons'
-- instead.
-tail :: [a] -> [a]
+tail :: HasCallStack => [a] -> [a]
tail (_:xs) = xs
tail [] = errorEmptyList "tail"
@@ -135,7 +136,7 @@ tail [] = errorEmptyList "tail"
--
-- WARNING: This function is partial. You can use 'reverse' with case-matching,
-- 'uncons' or 'listToMaybe' instead.
-last :: [a] -> a
+last :: HasCallStack => [a] -> a
#if defined(USE_REPORT_PRELUDE)
last [x] = x
last (_:xs) = last xs
@@ -148,7 +149,7 @@ last xs = foldl (\_ x -> x) lastError xs
{-# INLINE last #-}
-- The inline pragma is required to make GHC remember the implementation via
-- foldl.
-lastError :: a
+lastError :: HasCallStack => a
lastError = errorEmptyList "last"
#endif
@@ -164,7 +165,7 @@ lastError = errorEmptyList "last"
--
-- WARNING: This function is partial. You can use 'reverse' with case-matching
-- or 'uncons' instead.
-init :: [a] -> [a]
+init :: HasCallStack => [a] -> [a]
#if defined(USE_REPORT_PRELUDE)
init [x] = []
init (x:xs) = x : init xs
@@ -382,12 +383,12 @@ to make the desired list fusion robust.
-- True
-- >>> foldl1 (+) [1..]
-- * Hangs forever *
-foldl1 :: (a -> a -> a) -> [a] -> a
+foldl1 :: HasCallStack => (a -> a -> a) -> [a] -> a
foldl1 f (x:xs) = foldl f x xs
foldl1 _ [] = errorEmptyList "foldl1"
-- | A strict version of 'foldl1'.
-foldl1' :: (a -> a -> a) -> [a] -> a
+foldl1' :: HasCallStack => (a -> a -> a) -> [a] -> a
foldl1' f (x:xs) = foldl' f x xs
foldl1' _ [] = errorEmptyList "foldl1'"
@@ -601,7 +602,7 @@ foldr' f z0 xs = foldl f' id xs z0
-- True
-- >>> force $ foldr1 (+) [1..]
-- *** Exception: stack overflow
-foldr1 :: (a -> a -> a) -> [a] -> a
+foldr1 :: HasCallStack => (a -> a -> a) -> [a] -> a
foldr1 f = go
where go [x] = x
go (x:xs) = f x (go xs)
@@ -707,7 +708,7 @@ scanr1 f (x:xs) = f x q : qs
-- 55
-- >>> maximum [1..]
-- * Hangs forever *
-maximum :: (Ord a) => [a] -> a
+maximum :: (Ord a, HasCallStack) => [a] -> a
{-# INLINABLE maximum #-}
maximum [] = errorEmptyList "maximum"
maximum xs = foldl1' max xs
@@ -731,7 +732,7 @@ maximum xs = foldl1' max xs
-- -89
-- >>> minimum [1..]
-- * Hangs forever *
-minimum :: (Ord a) => [a] -> a
+minimum :: (Ord a, HasCallStack) => [a] -> a
{-# INLINABLE minimum #-}
minimum [] = errorEmptyList "minimum"
minimum xs = foldl1' min xs
@@ -836,7 +837,7 @@ replicate n x = take n (repeat x)
-- [42,42,42,42,42,42,42,42,42,42...
-- >>> take 20 $ cycle [2, 5, 7]
-- [2,5,7,2,5,7,2,5,7,2,5,7...
-cycle :: [a] -> [a]
+cycle :: HasCallStack => [a] -> [a]
cycle [] = errorEmptyList "cycle"
cycle xs = xs' where xs' = xs ++ xs'
@@ -1345,23 +1346,25 @@ concat = foldr (++) []
-- WARNING: This function is partial. You can use <'atMay'
-- https://hackage.haskell.org/package/safe-0.3.19/docs/Safe.html#v:atMay>
-- instead.
-(!!) :: [a] -> Int -> a
#if defined(USE_REPORT_PRELUDE)
+(!!) :: [a] -> Int -> a
xs !! n | n < 0 = errorWithoutStackTrace "Prelude.!!: negative index"
[] !! _ = errorWithoutStackTrace "Prelude.!!: index too large"
(x:_) !! 0 = x
(_:xs) !! n = xs !! (n-1)
+-- Prelude version is without HasCallStack to avoid building linear one
#else
+(!!) :: HasCallStack => [a] -> Int -> a
-- We don't really want the errors to inline with (!!).
-- We may want to fuss around a bit with NOINLINE, and
-- if so we should be careful not to trip up known-bottom
-- optimizations.
-tooLarge :: Int -> a
-tooLarge _ = errorWithoutStackTrace (prel_list_str ++ "!!: index too large")
+tooLarge :: HasCallStack => Int -> a
+tooLarge _ = error (prel_list_str ++ "!!: index too large")
-negIndex :: a
-negIndex = errorWithoutStackTrace $ prel_list_str ++ "!!: negative index"
+negIndex :: HasCallStack => a
+negIndex = error $ prel_list_str ++ "!!: negative index"
{-# INLINABLE (!!) #-}
xs !! n
@@ -1633,9 +1636,9 @@ unzip3 = foldr (\(a,b,c) ~(as,bs,cs) -> (a:as,b:bs,c:cs))
-- Common up near identical calls to `error' to reduce the number
-- constant strings created when compiled:
-errorEmptyList :: String -> a
+errorEmptyList :: HasCallStack => String -> a
errorEmptyList fun =
- errorWithoutStackTrace (prel_list_str ++ fun ++ ": empty list")
+ error (prel_list_str ++ fun ++ ": empty list")
prel_list_str :: String
prel_list_str = "Prelude."
diff --git a/libraries/base/changelog.md b/libraries/base/changelog.md
index 52f6a56d0c..6c9bd23184 100644
--- a/libraries/base/changelog.md
+++ b/libraries/base/changelog.md
@@ -29,6 +29,10 @@
* `GHC.Exts` now re-exports `Multiplicity` and `MultMul`.
+ * A large number of partial functions in `Data.List` and `Data.List.NonEmpty` now
+ have an HasCallStack constraint. Hopefully providing better error messages in case
+ they are used in unexpected ways.
+
## 4.16.0.0 *Nov 2021*
* The unary tuple type, `Solo`, is now exported by `Data.Tuple`.
diff --git a/testsuite/tests/ghci.debugger/scripts/break009.stdout b/testsuite/tests/ghci.debugger/scripts/break009.stdout
index ab09ffa7c1..277fd16bac 100644
--- a/testsuite/tests/ghci.debugger/scripts/break009.stdout
+++ b/testsuite/tests/ghci.debugger/scripts/break009.stdout
@@ -2,3 +2,8 @@ Breakpoint 0 activated at Test6.hs:5:8-11
Stopped in Main.main, Test6.hs:5:8-11
_result :: a = _
*** Exception: Prelude.head: empty list
+CallStack (from HasCallStack):
+ error, called at libraries/base/GHC/List.hs:1590:3 in base:GHC.List
+ errorEmptyList, called at libraries/base/GHC/List.hs:74:11 in base:GHC.List
+ badHead, called at libraries/base/GHC/List.hs:70:28 in base:GHC.List
+ head, called at Test6.hs:1:8 in main:Main
diff --git a/testsuite/tests/ghci.debugger/scripts/print027.stdout b/testsuite/tests/ghci.debugger/scripts/print027.stdout
index 9426ba8365..c0e9e3712d 100644
--- a/testsuite/tests/ghci.debugger/scripts/print027.stdout
+++ b/testsuite/tests/ghci.debugger/scripts/print027.stdout
@@ -1,6 +1,6 @@
+ = (_t1::Num a => a -> a -> a)
print = (_t2::Show a => a -> IO ())
log = (_t3::Floating a => a -> a)
-head = (_t4::[a] -> a)
-tail = (_t5::[a] -> [a])
+head = (_t4::GHC.Stack.Types.HasCallStack => [a] -> a)
+tail = (_t5::GHC.Stack.Types.HasCallStack => [a] -> [a])
fst = (_t6::(a, b) -> a)
diff --git a/testsuite/tests/ghci/scripts/T10501.stderr b/testsuite/tests/ghci/scripts/T10501.stderr
index 669b72bf45..9d41d0f211 100644
--- a/testsuite/tests/ghci/scripts/T10501.stderr
+++ b/testsuite/tests/ghci/scripts/T10501.stderr
@@ -1,4 +1,9 @@
*** Exception: Prelude.head: empty list
+CallStack (from HasCallStack):
+ error, called at libraries/base/GHC/List.hs:1590:3 in base:GHC.List
+ errorEmptyList, called at libraries/base/GHC/List.hs:74:11 in base:GHC.List
+ badHead, called at libraries/base/GHC/List.hs:70:28 in base:GHC.List
+ head, called at <interactive>:1:10 in interactive:Ghci1
*** Exception: Prelude.undefined
CallStack (from HasCallStack):
undefined, called at <interactive>:1:17 in interactive:Ghci1
diff --git a/testsuite/tests/plugins/test-hole-plugin.stderr b/testsuite/tests/plugins/test-hole-plugin.stderr
index 109736fa78..9e9b01b726 100644
--- a/testsuite/tests/plugins/test-hole-plugin.stderr
+++ b/testsuite/tests/plugins/test-hole-plugin.stderr
@@ -19,7 +19,7 @@ test-hole-plugin.hs:13:5: warning: [-Wtyped-holes (in -Wdefault)]
i :: [Int] -> Int
g :: [Int] -> Int
h :: [Int] -> Int
- head :: forall a. [a] -> a
+ head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
(Some hole fits suppressed; use -fmax-valid-hole-fits=N or -fno-max-valid-hole-fits)
test-hole-plugin.hs:14:5: warning: [-Wtyped-holes (in -Wdefault)]
@@ -34,7 +34,7 @@ test-hole-plugin.hs:14:5: warning: [-Wtyped-holes (in -Wdefault)]
minimum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
maximum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
length :: forall (t :: * -> *) a. Foldable t => t a -> Int
- last :: forall a. [a] -> a
+ last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
(Some hole fits suppressed; use -fmax-valid-hole-fits=N or -fno-max-valid-hole-fits)
test-hole-plugin.hs:15:5: warning: [-Wtyped-holes (in -Wdefault)]
@@ -44,8 +44,8 @@ test-hole-plugin.hs:15:5: warning: [-Wtyped-holes (in -Wdefault)]
• Relevant bindings include
g :: [Int] -> Int (bound at test-hole-plugin.hs:15:1)
Valid hole fits include
- head :: forall a. [a] -> a
- last :: forall a. [a] -> a
+ head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
+ last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
test-hole-plugin.hs:16:5: warning: [-Wtyped-holes (in -Wdefault)]
• Found hole: _only_Prelude :: [Int] -> Int
diff --git a/testsuite/tests/simplCore/should_compile/T20103.stderr b/testsuite/tests/simplCore/should_compile/T20103.stderr
index 251a3e60fa..485d2d4617 100644
--- a/testsuite/tests/simplCore/should_compile/T20103.stderr
+++ b/testsuite/tests/simplCore/should_compile/T20103.stderr
@@ -1,22 +1,22 @@
==================== Tidy Core ====================
Result size of Tidy Core
- = {terms: 98, types: 59, coercions: 14, joins: 0/0}
+ = {terms: 136, types: 88, coercions: 25, joins: 0/0}
-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
lvl :: Int
[GblId, Unf=OtherCon []]
-lvl = GHC.Types.I# 12#
+lvl = GHC.Types.I# 28#
-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
lvl1 :: Int
[GblId, Unf=OtherCon []]
-lvl1 = GHC.Types.I# 7#
+lvl1 = GHC.Types.I# 6#
-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
lvl2 :: Int
[GblId, Unf=OtherCon []]
-lvl2 = GHC.Types.I# 9#
+lvl2 = GHC.Types.I# 24#
-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
lvl3 :: GHC.Prim.Addr#
@@ -60,18 +60,60 @@ lvl7 = GHC.Stack.Types.SrcLoc lvl6 lvl5 lvl4 lvl1 lvl2 lvl1 lvl
-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
lvl8 :: GHC.Prim.Addr#
[GblId, Unf=OtherCon []]
-lvl8 = "foo"#
+lvl8 = "head"#
-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
lvl9 :: [Char]
[GblId]
lvl9 = GHC.CString.unpackCString# lvl8
+-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
+lvl10 :: Int
+[GblId, Unf=OtherCon []]
+lvl10 = GHC.Types.I# 12#
+
+-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
+lvl11 :: Int
+[GblId, Unf=OtherCon []]
+lvl11 = GHC.Types.I# 7#
+
+-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
+lvl12 :: Int
+[GblId, Unf=OtherCon []]
+lvl12 = GHC.Types.I# 9#
+
+-- RHS size: {terms: 8, types: 0, coercions: 0, joins: 0/0}
+lvl13 :: SrcLoc
+[GblId, Unf=OtherCon []]
+lvl13
+ = GHC.Stack.Types.SrcLoc lvl6 lvl5 lvl4 lvl11 lvl12 lvl11 lvl10
+
+-- RHS size: {terms: 1, types: 0, coercions: 0, joins: 0/0}
+lvl14 :: GHC.Prim.Addr#
+[GblId, Unf=OtherCon []]
+lvl14 = "foo"#
+
+-- RHS size: {terms: 2, types: 0, coercions: 0, joins: 0/0}
+lvl15 :: [Char]
+[GblId]
+lvl15 = GHC.CString.unpackCString# lvl14
+
+-- RHS size: {terms: 6, types: 5, coercions: 4, joins: 0/0}
+lvl16 :: CallStack -> ([Char], SrcLoc)
+[GblId, Arity=1, Str=<S>b, Cpr=b, Unf=OtherCon []]
+lvl16
+ = \ (wild1 :: CallStack) ->
+ GHC.List.head1
+ @([Char], SrcLoc)
+ ((GHC.Stack.Types.PushCallStack lvl9 lvl7 wild1)
+ `cast` (Sym (GHC.Classes.N:IP[0] <"callStack">_N <CallStack>_N)
+ :: CallStack ~R# (?callStack::CallStack)))
+
Rec {
--- RHS size: {terms: 36, types: 29, coercions: 14, joins: 0/0}
+-- RHS size: {terms: 44, types: 41, coercions: 21, joins: 0/0}
T20103.$wfoo [InlPrag=[2], Occ=LoopBreaker]
:: HasCallStack => GHC.Prim.Int# -> GHC.Prim.Int#
-[GblId, Arity=2, Str=<1L><1L>, Unf=OtherCon []]
+[GblId, Arity=2, Str=<SL><1L>, Unf=OtherCon []]
T20103.$wfoo
= \ ($dIP :: HasCallStack) (ww :: GHC.Prim.Int#) ->
case ww of ds {
@@ -82,7 +124,7 @@ T20103.$wfoo
of wild1 {
__DEFAULT ->
T20103.$wfoo
- ((GHC.Stack.Types.PushCallStack lvl9 lvl7 wild1)
+ ((GHC.Stack.Types.PushCallStack lvl15 lvl13 wild1)
`cast` (Sym (GHC.Classes.N:IP[0] <"callStack">_N <CallStack>_N)
:: CallStack ~R# (?callStack::CallStack)))
(GHC.Prim.-# ds 1#);
@@ -99,7 +141,21 @@ T20103.$wfoo
`cast` (GHC.Classes.N:IP[0] <"callStack">_N <CallStack>_N
:: (?callStack::CallStack) ~R# CallStack))
of {
- [] -> case GHC.List.badHead of wild1 { };
+ [] ->
+ case $dIP
+ `cast` (GHC.Classes.N:IP[0] <"callStack">_N <CallStack>_N
+ :: (?callStack::CallStack) ~R# CallStack)
+ of wild1 {
+ __DEFAULT -> case lvl16 wild1 of wild2 { };
+ GHC.Stack.Types.FreezeCallStack ds1 ->
+ case GHC.List.head1
+ @([Char], SrcLoc)
+ (wild1
+ `cast` (Sym (GHC.Classes.N:IP[0] <"callStack">_N <CallStack>_N)
+ :: CallStack ~R# (?callStack::CallStack)))
+ of wild2 {
+ }
+ };
: x ds1 -> case x of { (x1, ds2) -> GHC.List.$wlenAcc @Char x1 0# }
}
}
@@ -109,7 +165,7 @@ end Rec }
foo [InlPrag=[2]] :: HasCallStack => Int -> Int
[GblId,
Arity=2,
- Str=<1L><1P(1L)>,
+ Str=<SL><1!P(1L)>,
Cpr=1,
Unf=Unf{Src=InlineStable, TopLvl=True, Value=True, ConLike=True,
WorkFree=True, Expandable=True,
diff --git a/testsuite/tests/th/TH_exn2.stderr b/testsuite/tests/th/TH_exn2.stderr
index 582928c08b..9d9205056c 100644
--- a/testsuite/tests/th/TH_exn2.stderr
+++ b/testsuite/tests/th/TH_exn2.stderr
@@ -2,5 +2,9 @@
TH_exn2.hs:1:1: error:
Exception when trying to run compile-time code:
Prelude.tail: empty list
+CallStack (from HasCallStack):
+ error, called at libraries/base/GHC/List.hs:1590:3 in base:GHC.List
+ errorEmptyList, called at libraries/base/GHC/List.hs:114:28 in base:GHC.List
+ tail, called at TH_exn2.hs:10:17 in main:TH
Code: (do ds <- [d| |]
return (tail ds))
diff --git a/testsuite/tests/typecheck/should_compile/abstract_refinement_hole_fits.stderr b/testsuite/tests/typecheck/should_compile/abstract_refinement_hole_fits.stderr
index 61ed517535..62886f3bf7 100644
--- a/testsuite/tests/typecheck/should_compile/abstract_refinement_hole_fits.stderr
+++ b/testsuite/tests/typecheck/should_compile/abstract_refinement_hole_fits.stderr
@@ -8,8 +8,8 @@ abstract_refinement_hole_fits.hs:4:5: warning: [-Wtyped-holes (in -Wdefault)]
Valid hole fits include
f :: [Integer] -> Integer
g :: [Integer] -> Integer
- head :: forall a. [a] -> a
- last :: forall a. [a] -> a
+ head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
+ last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
maximum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
product :: forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
@@ -86,9 +86,9 @@ abstract_refinement_hole_fits.hs:4:5: warning: [-Wtyped-holes (in -Wdefault)]
id (_ :: t0 -> [Integer] -> Integer) (_ :: t0)
where id :: forall a. a -> a
head (_ :: [t0 -> [Integer] -> Integer]) (_ :: t0)
- where head :: forall a. [a] -> a
+ where head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
last (_ :: [t0 -> [Integer] -> Integer]) (_ :: t0)
- where last :: forall a. [a] -> a
+ where last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
fst (_ :: (t0 -> [Integer] -> Integer, b2)) (_ :: t0)
where fst :: forall a b. (a, b) -> a
snd (_ :: (a2, t0 -> [Integer] -> Integer)) (_ :: t0)
@@ -96,13 +96,15 @@ abstract_refinement_hole_fits.hs:4:5: warning: [-Wtyped-holes (in -Wdefault)]
id (_ :: [Integer] -> Integer)
where id :: forall a. a -> a
head (_ :: [[Integer] -> Integer])
- where head :: forall a. [a] -> a
+ where head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
last (_ :: [[Integer] -> Integer])
- where last :: forall a. [a] -> a
+ where last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
asTypeOf (_ :: [Integer] -> Integer) (_ :: [Integer] -> Integer)
where asTypeOf :: forall a. a -> a -> a
(!!) (_ :: [[Integer] -> Integer]) (_ :: Int)
- where (!!) :: forall a. [a] -> Int -> a
+ where (!!) :: forall a.
+ GHC.Stack.Types.HasCallStack =>
+ [a] -> Int -> a
fst (_ :: ([Integer] -> Integer, b0))
where fst :: forall a b. (a, b) -> a
snd (_ :: (a0, [Integer] -> Integer))
@@ -204,9 +206,9 @@ abstract_refinement_hole_fits.hs:7:5: warning: [-Wtyped-holes (in -Wdefault)]
id (_ :: t0 -> Integer -> [Integer] -> Integer) (_ :: t0)
where id :: forall a. a -> a
head (_ :: [t0 -> Integer -> [Integer] -> Integer]) (_ :: t0)
- where head :: forall a. [a] -> a
+ where head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
last (_ :: [t0 -> Integer -> [Integer] -> Integer]) (_ :: t0)
- where last :: forall a. [a] -> a
+ where last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
fst (_ :: (t0 -> Integer -> [Integer] -> Integer, b2)) (_ :: t0)
where fst :: forall a b. (a, b) -> a
snd (_ :: (a2, t0 -> Integer -> [Integer] -> Integer)) (_ :: t0)
@@ -214,14 +216,16 @@ abstract_refinement_hole_fits.hs:7:5: warning: [-Wtyped-holes (in -Wdefault)]
id (_ :: Integer -> [Integer] -> Integer)
where id :: forall a. a -> a
head (_ :: [Integer -> [Integer] -> Integer])
- where head :: forall a. [a] -> a
+ where head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
last (_ :: [Integer -> [Integer] -> Integer])
- where last :: forall a. [a] -> a
+ where last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
asTypeOf (_ :: Integer -> [Integer] -> Integer)
(_ :: Integer -> [Integer] -> Integer)
where asTypeOf :: forall a. a -> a -> a
(!!) (_ :: [Integer -> [Integer] -> Integer]) (_ :: Int)
- where (!!) :: forall a. [a] -> Int -> a
+ where (!!) :: forall a.
+ GHC.Stack.Types.HasCallStack =>
+ [a] -> Int -> a
fst (_ :: (Integer -> [Integer] -> Integer, b0))
where fst :: forall a b. (a, b) -> a
snd (_ :: (a0, Integer -> [Integer] -> Integer))
diff --git a/testsuite/tests/typecheck/should_compile/constraint_hole_fits.stderr b/testsuite/tests/typecheck/should_compile/constraint_hole_fits.stderr
index 3cc66588f0..5696a16781 100644
--- a/testsuite/tests/typecheck/should_compile/constraint_hole_fits.stderr
+++ b/testsuite/tests/typecheck/should_compile/constraint_hole_fits.stderr
@@ -11,8 +11,8 @@ constraint_hole_fits.hs:4:5: warning: [-Wtyped-holes (in -Wdefault)]
Constraints include Ord a (from constraint_hole_fits.hs:3:1-22)
Valid hole fits include
g :: [a] -> a
- head :: forall a. [a] -> a
- last :: forall a. [a] -> a
+ head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
+ last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
maximum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
minimum :: forall (t :: * -> *) a. (Foldable t, Ord a) => t a -> a
Valid refinement hole fits include
@@ -45,10 +45,12 @@ constraint_hole_fits.hs:4:5: warning: [-Wtyped-holes (in -Wdefault)]
id (_ :: [a] -> a)
where id :: forall a. a -> a
head (_ :: [[a] -> a])
- where head :: forall a. [a] -> a
+ where head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
last (_ :: [[a] -> a])
- where last :: forall a. [a] -> a
+ where last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
asTypeOf (_ :: [a] -> a) (_ :: [a] -> a)
where asTypeOf :: forall a. a -> a -> a
(!!) (_ :: [[a] -> a]) (_ :: Int)
- where (!!) :: forall a. [a] -> Int -> a
+ where (!!) :: forall a.
+ GHC.Stack.Types.HasCallStack =>
+ [a] -> Int -> a
diff --git a/testsuite/tests/typecheck/should_compile/holes.stderr b/testsuite/tests/typecheck/should_compile/holes.stderr
index 1e19fa85ba..cde126e969 100644
--- a/testsuite/tests/typecheck/should_compile/holes.stderr
+++ b/testsuite/tests/typecheck/should_compile/holes.stderr
@@ -95,15 +95,15 @@ holes.hs:11:15: warning: [-Wtyped-holes (in -Wdefault)]
id :: forall a. a -> a
until :: forall a. (a -> Bool) -> (a -> a) -> a -> a
ioError :: forall a. IOError -> IO a
- (!!) :: forall a. [a] -> Int -> a
+ (!!) :: forall a. GHC.Stack.Types.HasCallStack => [a] -> Int -> a
break :: forall a. (a -> Bool) -> [a] -> ([a], [a])
- cycle :: forall a. [a] -> [a]
+ cycle :: forall a. GHC.Stack.Types.HasCallStack => [a] -> [a]
drop :: forall a. Int -> [a] -> [a]
dropWhile :: forall a. (a -> Bool) -> [a] -> [a]
- head :: forall a. [a] -> a
- init :: forall a. [a] -> [a]
+ head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
+ init :: forall a. GHC.Stack.Types.HasCallStack => [a] -> [a]
iterate :: forall a. (a -> a) -> a -> [a]
- last :: forall a. [a] -> a
+ last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
repeat :: forall a. a -> [a]
replicate :: forall a. Int -> a -> [a]
reverse :: forall a. [a] -> [a]
@@ -111,7 +111,7 @@ holes.hs:11:15: warning: [-Wtyped-holes (in -Wdefault)]
scanr1 :: forall a. (a -> a -> a) -> [a] -> [a]
span :: forall a. (a -> Bool) -> [a] -> ([a], [a])
splitAt :: forall a. Int -> [a] -> ([a], [a])
- tail :: forall a. [a] -> [a]
+ tail :: forall a. GHC.Stack.Types.HasCallStack => [a] -> [a]
take :: forall a. Int -> [a] -> [a]
takeWhile :: forall a. (a -> Bool) -> [a] -> [a]
subtract :: forall a. Num a => a -> a -> a
diff --git a/testsuite/tests/typecheck/should_compile/holes3.stderr b/testsuite/tests/typecheck/should_compile/holes3.stderr
index 448f89009e..4dec2c57a5 100644
--- a/testsuite/tests/typecheck/should_compile/holes3.stderr
+++ b/testsuite/tests/typecheck/should_compile/holes3.stderr
@@ -98,15 +98,15 @@ holes3.hs:11:15: error:
id :: forall a. a -> a
until :: forall a. (a -> Bool) -> (a -> a) -> a -> a
ioError :: forall a. IOError -> IO a
- (!!) :: forall a. [a] -> Int -> a
+ (!!) :: forall a. GHC.Stack.Types.HasCallStack => [a] -> Int -> a
break :: forall a. (a -> Bool) -> [a] -> ([a], [a])
- cycle :: forall a. [a] -> [a]
+ cycle :: forall a. GHC.Stack.Types.HasCallStack => [a] -> [a]
drop :: forall a. Int -> [a] -> [a]
dropWhile :: forall a. (a -> Bool) -> [a] -> [a]
- head :: forall a. [a] -> a
- init :: forall a. [a] -> [a]
+ head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
+ init :: forall a. GHC.Stack.Types.HasCallStack => [a] -> [a]
iterate :: forall a. (a -> a) -> a -> [a]
- last :: forall a. [a] -> a
+ last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
repeat :: forall a. a -> [a]
replicate :: forall a. Int -> a -> [a]
reverse :: forall a. [a] -> [a]
@@ -114,7 +114,7 @@ holes3.hs:11:15: error:
scanr1 :: forall a. (a -> a -> a) -> [a] -> [a]
span :: forall a. (a -> Bool) -> [a] -> ([a], [a])
splitAt :: forall a. Int -> [a] -> ([a], [a])
- tail :: forall a. [a] -> [a]
+ tail :: forall a. GHC.Stack.Types.HasCallStack => [a] -> [a]
take :: forall a. Int -> [a] -> [a]
takeWhile :: forall a. (a -> Bool) -> [a] -> [a]
subtract :: forall a. Num a => a -> a -> a
diff --git a/testsuite/tests/typecheck/should_compile/refinement_hole_fits.stderr b/testsuite/tests/typecheck/should_compile/refinement_hole_fits.stderr
index 80249908b8..6084e6aa0f 100644
--- a/testsuite/tests/typecheck/should_compile/refinement_hole_fits.stderr
+++ b/testsuite/tests/typecheck/should_compile/refinement_hole_fits.stderr
@@ -7,11 +7,11 @@ refinement_hole_fits.hs:4:5: warning: [-Wtyped-holes (in -Wdefault)]
Valid hole fits include
f :: [Integer] -> Integer (bound at refinement_hole_fits.hs:4:1)
g :: [Integer] -> Integer (bound at refinement_hole_fits.hs:7:1)
- head :: forall a. [a] -> a
+ head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
with head @Integer
(imported from ‘Prelude’ at refinement_hole_fits.hs:1:8-30
(and originally defined in ‘GHC.List’))
- last :: forall a. [a] -> a
+ last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
with last @Integer
(imported from ‘Prelude’ at refinement_hole_fits.hs:1:8-30
(and originally defined in ‘GHC.List’))
@@ -95,12 +95,12 @@ refinement_hole_fits.hs:4:5: warning: [-Wtyped-holes (in -Wdefault)]
(imported from ‘Prelude’ at refinement_hole_fits.hs:1:8-30
(and originally defined in ‘GHC.Base’))
head (_ :: [[Integer] -> Integer])
- where head :: forall a. [a] -> a
+ where head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
with head @([Integer] -> Integer)
(imported from ‘Prelude’ at refinement_hole_fits.hs:1:8-30
(and originally defined in ‘GHC.List’))
last (_ :: [[Integer] -> Integer])
- where last :: forall a. [a] -> a
+ where last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
with last @([Integer] -> Integer)
(imported from ‘Prelude’ at refinement_hole_fits.hs:1:8-30
(and originally defined in ‘GHC.List’))
@@ -110,7 +110,9 @@ refinement_hole_fits.hs:4:5: warning: [-Wtyped-holes (in -Wdefault)]
(imported from ‘Prelude’ at refinement_hole_fits.hs:1:8-30
(and originally defined in ‘GHC.Base’))
(!!) (_ :: [[Integer] -> Integer]) (_ :: Int)
- where (!!) :: forall a. [a] -> Int -> a
+ where (!!) :: forall a.
+ GHC.Stack.Types.HasCallStack =>
+ [a] -> Int -> a
with (!!) @([Integer] -> Integer)
(imported from ‘Prelude’ at refinement_hole_fits.hs:1:8-30
(and originally defined in ‘GHC.List’))
@@ -194,12 +196,12 @@ refinement_hole_fits.hs:7:5: warning: [-Wtyped-holes (in -Wdefault)]
(imported from ‘Prelude’ at refinement_hole_fits.hs:1:8-30
(and originally defined in ‘GHC.Base’))
head (_ :: [Integer -> [Integer] -> Integer])
- where head :: forall a. [a] -> a
+ where head :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
with head @(Integer -> [Integer] -> Integer)
(imported from ‘Prelude’ at refinement_hole_fits.hs:1:8-30
(and originally defined in ‘GHC.List’))
last (_ :: [Integer -> [Integer] -> Integer])
- where last :: forall a. [a] -> a
+ where last :: forall a. GHC.Stack.Types.HasCallStack => [a] -> a
with last @(Integer -> [Integer] -> Integer)
(imported from ‘Prelude’ at refinement_hole_fits.hs:1:8-30
(and originally defined in ‘GHC.List’))
@@ -210,7 +212,9 @@ refinement_hole_fits.hs:7:5: warning: [-Wtyped-holes (in -Wdefault)]
(imported from ‘Prelude’ at refinement_hole_fits.hs:1:8-30
(and originally defined in ‘GHC.Base’))
(!!) (_ :: [Integer -> [Integer] -> Integer]) (_ :: Int)
- where (!!) :: forall a. [a] -> Int -> a
+ where (!!) :: forall a.
+ GHC.Stack.Types.HasCallStack =>
+ [a] -> Int -> a
with (!!) @(Integer -> [Integer] -> Integer)
(imported from ‘Prelude’ at refinement_hole_fits.hs:1:8-30
(and originally defined in ‘GHC.List’))