| Copyright | (c) Nils Anders Danielsson 2004-2022 |
|---|---|
| License | See the file LICENCE. |
| Maintainer | http://www.cse.chalmers.se/~nad/ |
| Stability | experimental |
| Portability | non-portable (exceptions) |
| Safe Haskell | None |
| Language | Haskell2010 |
Test.ChasingBottoms.IsBottom
Description
Synopsis
- isBottom :: a -> Bool
- isBottomIO :: a -> IO Bool
- bottom :: a
- nonBottomError :: String -> a
- isBottomTimeOut :: Maybe Int -> a -> Bool
- isBottomTimeOutIO :: Maybe Int -> a -> IO Bool
Documentation
isBottom :: a -> Bool Source #
returns isBottom aFalse if a is distinct from bottom. If
a equals bottom and results in an exception of a certain kind
(see below), then . If isBottom a = Truea never reaches a
weak head normal form and never throws one of these exceptions,
then never terminates.isBottom a
The exceptions that yield True correspond to "pure bottoms",
i.e. bottoms that can originate in pure code:
Assertions are excluded, because their behaviour depends on
compiler flags (not pure, and a failed assertion should really
yield an exception and nothing else). The same applies to
arithmetic exceptions (machine dependent, except possibly for
DivideByZero, but the value infinity makes that case unclear as
well).
nonBottomError :: String -> a Source #
raises an exception (nonBottomError sAssertionFailed)
that is not caught by isBottom. Use s to describe the
exception.
isBottomTimeOut :: Maybe Int -> a -> Bool Source #
works like isBottomTimeOut timeOutLimitisBottom, but if
timeOutLimit is , then computations taking more than
Just limlim seconds are also considered to be equal to bottom. Note that
this is a very crude approximation of what a bottom is. Also note
that this "function" may return different answers upon different
invocations. Take it for what it is worth.
isBottomTimeOut is subject to all the same vagaries as
timeOut.
isBottomTimeOutIO :: Maybe Int -> a -> IO Bool Source #
A variant of isBottomTimeOut that lives in the IO monad.