-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Debugging by observing in place -- -- Hood debugger, based on the idea of observing functions and structures -- as they are evaluated. @package hood @version 0.3 module Debug.Hood.Observe -- | observe observes data structures in flight. -- -- An example of use is map (+1) . observe "intermeduate" . map (+2) -- -- -- In this example, we observe the value that flows from the producer -- map (+2) to the consumer map (+1). -- -- observe can also observe functions as well a structural values. observe :: (Observable a) => String -> a -> a newtype Observer O :: (forall a. (Observable a) => String -> a -> a) -> Observer type Observing a = a -> a -- | The Observable class defines how data types are observed. For -- Generic data types, this can be derived. For example: -- --
-- data MyType = MyConstr Int String deriving Generic -- instance Observable MyType --class Observable a where observer x c = to (gdmobserver (from x) c) observers label arg = defaultObservers label arg observer :: Observable a => a -> Parent -> a observers :: Observable a => String -> (Observer -> a) -> a -- | The main entry point; run some IO code, and debug inside it. -- -- An example of using this debugger is -- --
-- runO (print [ observe "+1" (+1) x | x <- observe "xs" [1..3]]) ---- --
-- [2,3,4]
-- -- +1
-- { 1 -> 2
-- }
-- -- +1
-- { 2 -> 3
-- }
-- -- +1
-- { 3 -> 4
-- }
-- -- xs
-- 1 : 2 : 3 : []
--
--
-- Which says, the return is [2,3,4], there were 3
-- calls to +1 (showing arguments and results), and xs, which
-- was the list 1 : 2 : 3 : [].
runO :: IO a -> IO ()
-- | print a value, with debugging
printO :: (Show a) => a -> IO ()
-- | print a string, with debugging
putStrO :: String -> IO ()
(<<) :: (Observable a) => ObserverM (a -> b) -> a -> ObserverM b
thunk :: (Observable a) => a -> ObserverM a
send :: String -> ObserverM a -> Parent -> a
observeBase :: (Show a) => a -> Parent -> a
observeOpaque :: String -> a -> Parent -> a
-- | run some code and return the CDS structure (for when you want to write
-- your own debugger).
debugO :: IO a -> IO [CDS]
data CDS
CDSNamed :: String -> CDSSet -> CDS
CDSCons :: Int -> String -> [CDSSet] -> CDS
CDSFun :: Int -> CDSSet -> CDSSet -> CDS
CDSEntered :: Int -> CDS
instance GHC.Classes.Ord Debug.Hood.Observe.Output
instance GHC.Classes.Eq Debug.Hood.Observe.Output
instance GHC.Classes.Ord Debug.Hood.Observe.CDS
instance GHC.Classes.Eq Debug.Hood.Observe.CDS
instance GHC.Show.Show Debug.Hood.Observe.CDS
instance GHC.Show.Show Debug.Hood.Observe.Event
instance GHC.Show.Show Debug.Hood.Observe.Change
instance GHC.Show.Show Debug.Hood.Observe.Parent
instance Debug.Hood.Observe.Observable GHC.Types.Int
instance Debug.Hood.Observe.Observable GHC.Types.Bool
instance Debug.Hood.Observe.Observable GHC.Integer.Type.Integer
instance Debug.Hood.Observe.Observable GHC.Types.Float
instance Debug.Hood.Observe.Observable GHC.Types.Double
instance Debug.Hood.Observe.Observable GHC.Types.Char
instance Debug.Hood.Observe.Observable ()
instance (Debug.Hood.Observe.Observable a, Debug.Hood.Observe.Observable b) => Debug.Hood.Observe.Observable (a, b)
instance (Debug.Hood.Observe.Observable a, Debug.Hood.Observe.Observable b, Debug.Hood.Observe.Observable c) => Debug.Hood.Observe.Observable (a, b, c)
instance (Debug.Hood.Observe.Observable a, Debug.Hood.Observe.Observable b, Debug.Hood.Observe.Observable c, Debug.Hood.Observe.Observable d) => Debug.Hood.Observe.Observable (a, b, c, d)
instance (Debug.Hood.Observe.Observable a, Debug.Hood.Observe.Observable b, Debug.Hood.Observe.Observable c, Debug.Hood.Observe.Observable d, Debug.Hood.Observe.Observable e) => Debug.Hood.Observe.Observable (a, b, c, d, e)
instance Debug.Hood.Observe.Observable a => Debug.Hood.Observe.Observable [a]
instance Debug.Hood.Observe.Observable a => Debug.Hood.Observe.Observable (GHC.Base.Maybe a)
instance (Debug.Hood.Observe.Observable a, Debug.Hood.Observe.Observable b) => Debug.Hood.Observe.Observable (Data.Either.Either a b)
instance (GHC.Arr.Ix a, Debug.Hood.Observe.Observable a, Debug.Hood.Observe.Observable b) => Debug.Hood.Observe.Observable (GHC.Arr.Array a b)
instance Debug.Hood.Observe.Observable a => Debug.Hood.Observe.Observable (GHC.Types.IO a)
instance (Debug.Hood.Observe.Observable a, Debug.Hood.Observe.Observable b) => Debug.Hood.Observe.Observable (a -> b)
instance Debug.Hood.Observe.Observable GHC.Exception.SomeException
instance Debug.Hood.Observe.Observable Data.Dynamic.Dynamic
instance Debug.Hood.Observe.GObservable a => Debug.Hood.Observe.GObservable (GHC.Generics.M1 GHC.Generics.D d a)
instance (Debug.Hood.Observe.GObservable a, GHC.Generics.Selector s) => Debug.Hood.Observe.GObservable (GHC.Generics.M1 GHC.Generics.S s a)
instance (Debug.Hood.Observe.GObservable a, GHC.Generics.Constructor c) => Debug.Hood.Observe.GObservable (GHC.Generics.M1 GHC.Generics.C c a)
instance Debug.Hood.Observe.GObservable GHC.Generics.U1
instance (Debug.Hood.Observe.GObservable a, Debug.Hood.Observe.GObservable b) => Debug.Hood.Observe.GObservable (a GHC.Generics.:+: b)
instance (Debug.Hood.Observe.GObservable a, Debug.Hood.Observe.GObservable b) => Debug.Hood.Observe.GObservable (a GHC.Generics.:*: b)
instance Debug.Hood.Observe.Observable a => Debug.Hood.Observe.GObservable (GHC.Generics.K1 i a)
instance GHC.Base.Functor Debug.Hood.Observe.ObserverM
instance GHC.Base.Applicative Debug.Hood.Observe.ObserverM
instance GHC.Base.Monad Debug.Hood.Observe.ObserverM