diff options
author | Oleg Grenrus <oleg.grenrus@iki.fi> | 2020-12-26 00:28:12 +0200 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-01-02 07:36:33 -0500 |
commit | aa17b84dab91408090f079f85d62ef3221f4ab88 (patch) | |
tree | d018205fc9de5d52039d3f2be1041d297efc4c29 /libraries/base/Debug | |
parent | 4c178374983dddb75341352aef1d15658a82463b (diff) | |
download | haskell-aa17b84dab91408090f079f85d62ef3221f4ab88.tar.gz |
Correct doctests
It's simpler to assume that base is NoImplicitPrelude,
otherwise running doctest on `GHC.*` modules would be tricky.
OTOH, most `GHC.List` (where the most name clashes are) examples
could be changed to use `import qualified Data.List as L`.
(GHC.List examples won't show for Foldable methods...).
With these changes majority of doctest examples are GHCi-"faithful",
my WIP GHC-independent doctest runner reports nice summary:
Examples: 582; Tried: 546; Skipped: 34; Success: 515; Errors: 33; Property Failures 2
Most error cases are *Hangs forever*.
I have yet to figure out how to demonstrate that in GHCi.
Some of divergences are actually stack overflows, i.e. caught by
runtime.
Few errorful cases are examples of infinite output, e.g.
>>> cycle [42]
[42,42,42,42,42,42,42,42,42,42...
while correct, they confuse doctest.
Another erroneous cases are where expected output has line comment, like
>>> fmap show (Just 1) -- (a -> b) -> f a -> f b
Just "1" -- (Int -> String) -> Maybe Int -> Maybe String
I think I just have to teach doctest to strip comments from expected
output.
This is a first patch in a series.
There is plenty of stuff already.
Diffstat (limited to 'libraries/base/Debug')
-rw-r--r-- | libraries/base/Debug/Trace.hs | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/libraries/base/Debug/Trace.hs b/libraries/base/Debug/Trace.hs index 5a8b55126c..e85fb7590a 100644 --- a/libraries/base/Debug/Trace.hs +++ b/libraries/base/Debug/Trace.hs @@ -106,12 +106,13 @@ putTraceMsg = traceIO The 'trace' function outputs the trace message given as its first argument, before returning the second argument as its result. -For example, this returns the value of @f x@ but first outputs the message. +For example, this returns the value of @f x@ and outputs the message to stderr. +Depending on your terminal (settings), they may or may not be mixed. >>> let x = 123; f = show >>> trace ("calling f with x = " ++ show x) (f x) -"calling f with x = 123 -123" +calling f with x = 123 +"123" The 'trace' function should /only/ be used for debugging, or for monitoring execution. The function is not referentially transparent: its type indicates @@ -127,8 +128,8 @@ trace string expr = unsafePerformIO $ do Like 'trace' but returns the message instead of a third value. >>> traceId "hello" -"hello -hello" +hello +"hello" @since 4.7.0.0 -} |