-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Like Debug.Trace but writing to files. -- -- Debug.Trace like functions to trace to files. @package debug-trace-file @version 1.0.0.0 -- | Like Debug.Trace but writing to files (when eventlog is too much). -- -- The functions use appendFile and append to files by default. -- The functions with suffix W (like traceFileW, -- traceFileIdW, etc) use writeFile. module Debug.Trace.File -- | The traceFile function appends to the provided file path given -- as its first argument, the trace message given as its second argument, -- before returning the third argument as its result. -- -- For example, this returns the value of f x and outputs the -- message to "/tmp/message". -- --
-- >>> let x = 123; f = show
--
-- >>> traceFile "/tmp/message" ("calling f with x = " ++ show x) (f x)
-- "123"
--
-- >>> readFile "/tmp/message"
-- "calling f with x = 123\n"
--
--
-- The traceFile function should only be used for
-- debugging, or for monitoring execution. The function is not
-- referentially transparent: its type indicates that it is a pure
-- function but it has the side effect of outputting the trace message.
traceFile :: FilePath -> String -> a -> a
-- | Like traceFile but uses writeFile instead of
-- appendFile which means will overwrite the contents of the file.
traceFileW :: FilePath -> String -> a -> a
-- | Like traceFile but returns the message instead of a third
-- value.
--
-- -- >>> traceFileId "/tmp/message" "hello" -- "hello" -- -- >>> readFile "/tmp/message" -- "hello\n" --traceFileId :: FilePath -> String -> String -- | Like traceFileId but uses writeFile instead of -- appendFile which means will overwrite the contents of the file. traceFileIdW :: FilePath -> String -> String -- | Like traceFile, but uses show on the argument to convert -- it to a String. -- -- This makes it convenient for printing the values of interesting -- variables or expressions inside a function. For example here we print -- the value of the variables x and y: -- --
-- >>> let f x y = traceFileShow "/tmp/message" (x,y) (x + y) in f (1+2) 5 -- 8 -- -- >>> readFile "/tmp/message" -- "(3,5)\n" --traceFileShow :: Show a => FilePath -> a -> b -> b -- | Like traceFileShow but uses writeFile instead of -- appendFile which means will overwrite the contents of the file. traceFileShowW :: Show a => FilePath -> a -> b -> b -- | Like traceFileShow but returns the shown value instead of a -- third value. -- --
-- >>> traceFileShowId "/tmp/message" (1+2+3, "hello" ++ "world") -- (6,"helloworld") -- -- >>> readFile "/tmp/message" -- "(6,\"helloworld\")\n" --traceFileShowId :: Show a => FilePath -> a -> a -- | Like traceFileShowId but uses writeFile instead of -- appendFile which means will overwrite the contents of the file. traceFileShowIdW :: Show a => FilePath -> a -> a -- | Like traceFile, but outputs the result of calling a function on -- the argument. -- --
-- >>> traceFileWith "/tmp/message" fst ("hello","world")
-- ("hello","world")
--
-- >>> readFile "/tmp/message"
-- "hello\n"
--
traceFileWith :: FilePath -> (a -> String) -> a -> a
-- | Like traceFileWith but uses writeFile instead of
-- appendFile which means will overwrite the contents of the file.
traceFileWithW :: FilePath -> (a -> String) -> a -> a
-- | Like traceFileWith, but uses show on the result of the
-- function to convert it to a String.
--
-- -- >>> traceFileShowWith "/tmp/message" length [1,2,3] -- [1,2,3] -- -- >>> readFile "/tmp/message" -- "3\n" --traceFileShowWith :: Show b => FilePath -> (a -> b) -> a -> a -- | Like traceFileWith but uses writeFile instead of -- appendFile which means will overwrite the contents of the file. traceFileShowWithW :: Show b => FilePath -> (a -> b) -> a -> a -- | Like traceFile but returning unit in an arbitrary -- Applicative context. Allows for convenient use in do-notation. -- --
-- >>> :{
-- do
-- x <- Just 3
-- traceFileM "/tmp/message" ("x: " ++ show x)
-- y <- pure 12
-- traceFileM "/tmp/message" ("y: " ++ show y)
-- pure (x*2 + y)
-- :}
-- Just 18
--
-- >>> readFile "/tmp/message"
-- "x: 3\ny: 12\n"
--
traceFileM :: Applicative f => FilePath -> String -> f ()
-- | Like traceFileM but uses writeFile instead of
-- appendFile which means will overwrite the contents of the file.
traceFileMW :: Applicative f => FilePath -> String -> f ()
-- | Like traceFileM, but uses show on the argument to
-- convert it to a String.
--
--
-- >>> :{
-- do
-- x <- Just 3
-- traceFileShowM "/tmp/message" x
-- y <- pure 12
-- traceFileShowM "/tmp/message" y
-- pure (x*2 + y)
-- :}
-- Just 18
--
-- >>> readFile "/tmp/message"
-- "3\n12\n"
--
traceFileShowM :: (Show a, Applicative f) => FilePath -> a -> f ()
-- | Like traceFileShowM but uses writeFile instead of
-- appendFile which means will overwrite the contents of the file.
traceFileShowMW :: (Show a, Applicative f) => FilePath -> a -> f ()