diff --git a/protolude.cabal b/protolude.cabal index 6e4fd5a76..08ed9d1c0 100644 --- a/protolude.cabal +++ b/protolude.cabal @@ -48,6 +48,7 @@ library Functor Semiring Bifunctor + Panic default-extensions: NoImplicitPrelude diff --git a/src/Debug.hs b/src/Debug.hs index d6cfcb2f3..dd7872657 100644 --- a/src/Debug.hs +++ b/src/Debug.hs @@ -18,10 +18,6 @@ import Control.Monad (Monad, return) import qualified Base as P import qualified Debug.Trace as T -{-# WARNING undefined "'undefined' remains in code" #-} -undefined :: a -undefined = P.undefined - {-# WARNING error "'error' remains in code" #-} error :: String -> a error = P.error @@ -46,6 +42,8 @@ traceM s = T.trace s (return ()) traceIO :: String -> P.IO () traceIO = T.traceIO -{-# WARNING notImplemented "'notImplemented' remains in code" #-} notImplemented :: a notImplemented = P.error "Not implemented" + +undefined :: a +undefined = P.undefined diff --git a/src/Panic.hs b/src/Panic.hs new file mode 100644 index 000000000..fd7a2d5af --- /dev/null +++ b/src/Panic.hs @@ -0,0 +1,17 @@ +module Panic ( + FatalError(..), + panic, +) where + +import Base (Show) +import Data.Text(Text) +import Control.Exception as X + +-- | Uncatchable exceptions thrown and never caught. +data FatalError = FatalError { msg :: Text } + deriving (Show) + +instance Exception FatalError + +panic :: Text -> a +panic a = throw (FatalError a) diff --git a/src/Protolude.hs b/src/Protolude.hs index 8a03b27f8..8ec142b5b 100644 --- a/src/Protolude.hs +++ b/src/Protolude.hs @@ -28,6 +28,7 @@ import Functor as X import Either as X import Applicative as X import Conv as X +import Panic as X import Base as Base hiding ( putStr