-- 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