Copyright | (c) 2016 Stephen Diehl (c) 2016-2018 Serokell (c) 2018-2019 Kowainik |
---|---|
License | MIT |
Maintainer | Kowainik <xrom.xkov@gmail.com> |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Functions for debugging. If you left these functions in your code then a warning is generated to remind you about left usages. Also some functions (and data types) are convenient for prototyping.
Use these functions only for debugging purposes. They break referential trasparency, 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:204: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 #