Copyright | (c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2020 Kowainik |
---|---|
License | MIT |
Maintainer | Kowainik <xrom.xkov@gmail.com> |
Stability | Stable |
Portability | Portable |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Functions for debugging and prototyping. If you leave these functions in your code then a warning is generated to remind you about left usages.
ghci> foo = trace "I forgot trace in code"
<interactive>:4:7: warning: [-Wdeprecations]
In the use of ‘trace’ (imported from Relude):
"trace
remains in code"
⚠ NOTE: Use these functions only for debugging purposes. They break referential transparency, they are only useful when you want to observe intermediate values of your pure functions.
Synopsis
- trace :: String -> a -> a
- traceM :: Applicative f => String -> f ()
- traceId :: String -> String
- traceShow :: Show a => a -> b -> b
- traceShowId :: Show a => a -> a
- traceShowM :: (Show a, Applicative f) => a -> f ()
- error :: forall (r :: RuntimeRep) (a :: TYPE r) (t :: Type). (HasCallStack, IsText t) => t -> a
- data Undefined = Undefined
- undefined :: forall (r :: RuntimeRep). forall (a :: TYPE r). HasCallStack => a
Tracing
traceM :: Applicative f => String -> f () Source #
traceShowId :: Show a => a -> a Source #
Warning: traceShowId
remains in code
Version of traceShowId
that leaves warning.
>>>
traceShowId (1+2+3, "hello" ++ "world")
(6,"helloworld") (6,"helloworld")
traceShowM :: (Show a, Applicative f) => a -> f () Source #
Warning: traceShowM
remains in code
Like traceM
, but uses show
on the argument to convert it to a
String
.
>>>
:{
let action :: Maybe Int action = do x <- Just 3 traceShowM x y <- pure 12 traceShowM y pure (x*2 + y) in action :} 3 12 Just 18
Imprecise error
error :: forall (r :: RuntimeRep) (a :: TYPE r) (t :: Type). (HasCallStack, IsText t) => t -> a Source #
Throw pure errors. Use this function only to when you are sure that this
branch of code execution is not possible. DO NOT USE error
as a normal
error handling mechanism.
>>>
error "oops"
*** Exception: oops CallStack (from HasCallStack): error, called at src/Relude/Debug.hs:218:11 in ... ...
⚠️CAUTION⚠️ Unlike Prelude version, error
takes Text
as an
argument. In case it used by mistake, the user will see the following:
>>>
error ("oops" :: String)
... ... 'error' expects 'Text' but was given 'String'. Possible fixes: * Make sure OverloadedStrings extension is enabled * Use 'error (toText msg)' instead of 'error msg' ...>>>
error False
... ... 'error' works with 'Text' But given: Bool ...
Instances
undefined :: forall (r :: RuntimeRep). forall (a :: TYPE r). HasCallStack => a Source #