-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Simple evaluation trace -- @package traced @version 3000 module Debug.Traced.Internal -- | Traced values of some type. data Traced a -- | Create a traced value. traced :: Traceable a => a -> Traced a -- | Create a named traced value. named :: Traceable a => String -> a -> Traced a -- | Add a named to a traced value. nameTraced :: Traceable a => String -> Traced a -> Traced a -- | Create a named thing with no value. Cannot be used where a real value -- is needed. unknown :: Traceable a => String -> Traced a -- | Extract the real value from a traced value. unTraced :: Traced a -> a -- | Extract the expression tree from a traced value. tracedD :: Traceable a => Traced a -> TracedD data TraceLevel TLValue :: TraceLevel TLExp :: TraceLevel TLFullExp :: TraceLevel class (Typeable a, Show a) => Traceable a trPPrint :: Traceable a => TraceLevel -> Int -> a -> Doc -- | Expression tree for a traced value. data TracedD -- | unknown value NoValue :: TracedD -- | value with a name Name :: Bool -> Name -> TracedD -> TracedD -- | constant Con :: a -> TracedD -- | application Apply :: a -> Name -> Fixity -> [TracedD] -> TracedD -- | (recovered) let expression Let :: [(Name, TracedD)] -> TracedD -> TracedD -- | Convert an expression tree to a traced value, if the types are -- correct. unTracedD :: Traceable a => TracedD -> Maybe (Traced a) binOp :: (Traceable a, Traceable b, Traceable c) => (a -> b -> c) -> (String, Fixity) -> Traced a -> Traced b -> Traced c unOp :: (Traceable a, Traceable b) => (a -> b) -> String -> Traced a -> Traced b -- | Create a traced value with an Apply expression tree. apply :: Traceable a => a -> Name -> Fixity -> [TracedD] -> Traced a liftT :: Liftable a b => Name -> Fixity -> a -> b liftFun :: Liftable a b => Name -> a -> b class Liftable a b | a -> b, b -> a liftT' :: Liftable a b => Name -> Fixity -> [TracedD] -> a -> b baseLiftT :: Traceable a => Name -> Fixity -> [TracedD] -> a -> Traced a -- | Fixity for identifier. data Fixity InfixL :: Int -> Fixity InfixR :: Int -> Fixity Infix :: Int -> Fixity Nonfix :: Fixity -- | Show the expression tree of a traced value. showAsExp :: Traceable a => Traced a -> String -- | Show the expression tree of a traced value, also show the value of -- each variable. showAsExpFull :: Traceable a => Traced a -> String pPrintTraced :: Traceable a => TraceLevel -> Int -> Traced a -> Doc reShare :: Traceable a => Traced a -> Traced a -- | Simplify an expression tree. simplify :: Traced a -> Traced a instance [overlap ok] Typeable TraceLevel instance [overlap ok] Typeable TracedD instance [overlap ok] Typeable Traced instance [overlap ok] Eq TraceLevel instance [overlap ok] Ord TraceLevel instance [overlap ok] Show TraceLevel instance [overlap ok] Data TraceLevel instance [overlap ok] Eq Fixity instance [overlap ok] Ord Fixity instance [overlap ok] Show Fixity instance [overlap ok] Data a => Data (Traced a) instance [overlap ok] (Traceable a, RealFloat a) => RealFloat (Traced a) instance [overlap ok] (Traceable a, Floating a) => Floating (Traced a) instance [overlap ok] (Traceable a, RealFrac a) => RealFrac (Traced a) instance [overlap ok] (Traceable a, Real a) => Real (Traced a) instance [overlap ok] (Traceable a, Enum a) => Enum (Traced a) instance [overlap ok] (Traceable a, Integral a) => Integral (Traced a) instance [overlap ok] (Traceable a, Fractional a) => Fractional (Traced a) instance [overlap ok] (Traceable a, Num a) => Num (Traced a) instance [overlap ok] Show a => Show (Traced a) instance [overlap ok] Ord a => Ord (Traced a) instance [overlap ok] Eq a => Eq (Traced a) instance [overlap ok] Liftable () (Traced ()) instance [overlap ok] Liftable Ordering (Traced Ordering) instance [overlap ok] Liftable Bool (Traced Bool) instance [overlap ok] Liftable Float (Traced Float) instance [overlap ok] Liftable Double (Traced Double) instance [overlap ok] Liftable Int (Traced Int) instance [overlap ok] Liftable Integer (Traced Integer) instance [overlap ok] (Traceable a, Liftable b tb) => Liftable (a -> b) (Traced a -> tb) instance [overlap ok] Ord TracedD instance [overlap ok] Eq TracedD instance [overlap ok] Show TracedD instance [overlap ok] Data TracedD instance [overlap ok] (Typeable a, Show a) => Traceable a instance [overlap ok] (Read a, Traceable a) => Read (Traced a) -- | |The Traced module provides a simple way of tracing expression -- evaluation. A value of type Traced a has both a value of type -- a and an expression tree that describes how the value was -- computed. -- -- There are instances for the Traced type for all numeric classes -- to make it simple to trace numeric expressions. -- -- The expression tree associated with a traced value is exactly that: a -- tree. But evaluation of expressions in Haskell typically has sharing -- to avoid recomputation. This sharing can be recovered by the (impure) -- reShare function. -- -- $examples module Debug.Traced -- | Traced values of some type. data Traced a -- | Create a traced value. traced :: Traceable a => a -> Traced a -- | Create a named traced value. named :: Traceable a => String -> a -> Traced a -- | Add a named to a traced value. nameTraced :: Traceable a => String -> Traced a -> Traced a -- | Create a named thing with no value. Cannot be used where a real value -- is needed. unknown :: Traceable a => String -> Traced a -- | Extract the real value from a traced value. unTraced :: Traced a -> a -- | Extract the expression tree from a traced value. tracedD :: Traceable a => Traced a -> TracedD -- | Expression tree for a traced value. data TracedD -- | Convert an expression tree to a traced value, if the types are -- correct. unTracedD :: Traceable a => TracedD -> Maybe (Traced a) class (Typeable a, Show a) => Traceable a liftT :: Liftable a b => Name -> Fixity -> a -> b liftFun :: Liftable a b => Name -> a -> b class Liftable a b | a -> b, b -> a -- | Show the expression tree of a traced value. showAsExp :: Traceable a => Traced a -> String -- | Show the expression tree of a traced value, also show the value of -- each variable. showAsExpFull :: Traceable a => Traced a -> String reShare :: Traceable a => Traced a -> Traced a -- | Simplify an expression tree. simplify :: Traced a -> Traced a -- | Traced version of if. ifT :: Traceable a => Traced Bool -> Traced a -> Traced a -> Traced a -- | Comparisons generating traced booleans. (%==) :: (Traceable a, Eq a) => Traced a -> Traced a -> Traced Bool -- | Comparisons generating traced booleans. (%/=) :: (Traceable a, Eq a) => Traced a -> Traced a -> Traced Bool (%<) :: (Traceable a, Ord a) => Traced a -> Traced a -> Traced Bool (%<=) :: (Traceable a, Ord a) => Traced a -> Traced a -> Traced Bool (%>) :: (Traceable a, Ord a) => Traced a -> Traced a -> Traced Bool (%>=) :: (Traceable a, Ord a) => Traced a -> Traced a -> Traced Bool (%&&) :: Traced Bool -> Traced Bool -> Traced Bool (%||) :: Traced Bool -> Traced Bool -> Traced Bool tnot :: Traced Bool -> Traced Bool -- | A wrapper for Traced to show it with full details. data TracedExp a tracedExp :: Traceable a => a -> TracedExp a namedExp :: Traceable a => String -> a -> TracedExp a instance Typeable TracedExp instance Eq a => Eq (TracedExp a) instance Ord a => Ord (TracedExp a) instance (Num a, Show a, Typeable a) => Num (TracedExp a) instance (Fractional a, Show a, Typeable a) => Fractional (TracedExp a) instance (Integral a, Show a, Typeable a) => Integral (TracedExp a) instance (Enum a, Show a, Typeable a) => Enum (TracedExp a) instance (Real a, Show a, Typeable a) => Real (TracedExp a) instance (RealFrac a, Show a, Typeable a) => RealFrac (TracedExp a) instance (Floating a, Show a, Typeable a) => Floating (TracedExp a) instance (RealFloat a, Show a, Typeable a) => RealFloat (TracedExp a) instance (Traceable a, Show a) => Show (TracedExp a)