/var/lib/ghc/package.conf.d/ChasingBottoms-1.3.1.3.conf is in libghc-chasingbottoms-dev 1.3.1.3-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | name: ChasingBottoms
version: 1.3.1.3
id: ChasingBottoms-1.3.1.3-7pnxiz6kP4fLSA8egRpZ0i
key: ChasingBottoms-1.3.1.3-7pnxiz6kP4fLSA8egRpZ0i
license: MIT
copyright: Copyright (c) Nils Anders Danielsson 2004-2017.
maintainer: http://www.cse.chalmers.se/~nad/
synopsis: For testing partial and infinite values.
description:
Do you ever feel the need to test code involving bottoms (e.g. calls to
the @error@ function), or code involving infinite values? Then this
library could be useful for you.
.
It is usually easy to get a grip on bottoms by showing a value and
waiting to see how much gets printed before the first exception is
encountered. However, that quickly gets tiresome and is hard to automate
using e.g. QuickCheck
(<http://www.cse.chalmers.se/~rjmh/QuickCheck/>). With this library you
can do the tests as simply as the following examples show.
.
Testing explicitly for bottoms:
.
> > isBottom (head [])
> True
.
> > isBottom bottom
> True
.
> > isBottom (\_ -> bottom)
> False
.
> > isBottom (bottom, bottom)
> False
.
Comparing finite, partial values:
.
> > ((bottom, 3) :: (Bool, Int)) ==! (bottom, 2+5-4)
> True
.
> > ((bottom, bottom) :: (Bool, Int)) <! (bottom, 8)
> True
.
Showing partial and infinite values (@\\\/!@ is join and @\/\\!@ is meet):
.
> > approxShow 4 $ (True, bottom) \/! (bottom, 'b')
> "Just (True, 'b')"
.
> > approxShow 4 $ (True, bottom) /\! (bottom, 'b')
> "(_|_, _|_)"
.
> > approxShow 4 $ ([1..] :: [Int])
> "[1, 2, 3, _"
.
> > approxShow 4 $ (cycle [bottom] :: [Bool])
> "[_|_, _|_, _|_, _"
.
Approximately comparing infinite, partial values:
.
> > approx 100 [2,4..] ==! approx 100 (filter even [1..] :: [Int])
> True
.
> > approx 100 [2,4..] /=! approx 100 (filter even [bottom..] :: [Int])
> True
.
The code above relies on the fact that @bottom@, just as @error
\"...\"@, @undefined@ and pattern match failures, yield
exceptions. Sometimes we are dealing with properly non-terminating
computations, such as the following example, and then it can be nice to
be able to apply a time-out:
.
> > timeOut' 1 (reverse [1..5])
> Value [5,4,3,2,1]
.
> > timeOut' 1 (reverse [1..])
> NonTermination
.
The time-out functionality can be used to treat \"slow\" computations as
bottoms:
.
@
\> let tweak = Tweak { approxDepth = Just 5, timeOutLimit = Just 2 }
\> semanticEq tweak (reverse [1..], [1..]) (bottom :: [Int], [1..] :: [Int])
True
@
.
@
\> let tweak = noTweak { timeOutLimit = Just 2 }
\> semanticJoin tweak (reverse [1..], True) ([] :: [Int], bottom)
Just ([],True)
@
.
This can of course be dangerous:
.
@
\> let tweak = noTweak { timeOutLimit = Just 0 }
\> semanticEq tweak (reverse [1..100000000]) (bottom :: [Integer])
True
@
.
Timeouts can also be applied to @IO@ computations:
.
> > let primes () = unfoldr (\(x:xs) -> Just (x, filter ((/= 0) . (`mod` x)) xs)) [2..]
> > timeOutMicro 100 (print $ primes ())
> [2,NonTermination
> > timeOutMicro 10000 (print $ take 10 $ primes ())
> [2,3,5,7,11,13,17,19,23,29]
> Value ()
.
For the underlying theory and a larger example involving use of
QuickCheck, see the article \"Chasing Bottoms, A Case Study in Program
Verification in the Presence of Partial and Infinite Values\"
(<http://www.cse.chalmers.se/~nad/publications/danielsson-jansson-mpc2004.html>).
.
The code has been tested using GHC. Most parts can probably be
ported to other Haskell compilers, but this would require some work.
The @TimeOut@ functions require preemptive scheduling, and most of
the rest requires @Data.Generics@; @isBottom@ only requires
exceptions, though.
category: Testing
author: Nils Anders Danielsson
exposed: True
exposed-modules:
Test.ChasingBottoms Test.ChasingBottoms.Approx
Test.ChasingBottoms.ApproxShow
Test.ChasingBottoms.ContinuousFunctions
Test.ChasingBottoms.IsBottom Test.ChasingBottoms.Nat
Test.ChasingBottoms.SemanticOrd Test.ChasingBottoms.TimeOut
hidden-modules: Test.ChasingBottoms.IsType
abi: 0fc497129962c43715ace749d5f503bb
trusted: False
import-dirs: /usr/lib/haskell-packages/ghc/lib/x86_64-linux-ghc-8.0.2/ChasingBottoms-1.3.1.3-7pnxiz6kP4fLSA8egRpZ0i
library-dirs: /usr/lib/haskell-packages/ghc/lib/x86_64-linux-ghc-8.0.2/ChasingBottoms-1.3.1.3-7pnxiz6kP4fLSA8egRpZ0i
dynamic-library-dirs: /usr/lib/haskell-packages/ghc/lib/x86_64-linux-ghc-8.0.2
data-dir: /usr/share/chasingbottoms
hs-libraries: HSChasingBottoms-1.3.1.3-7pnxiz6kP4fLSA8egRpZ0i
depends:
QuickCheck-2.9.2-LvlomhGMxrFBkX1zwiWpQu base-4.9.1.0
containers-0.5.7.1 mtl-2.2.1-BLKBelFsPB3BoFeSWSOYj6
random-1.1-9tceXaeYIMZ4JrKq20Egog syb-0.7-4OKdCpwGutyB1rNRmoa0ya
haddock-interfaces: /usr/lib/ghc-doc/haddock/chasingbottoms-1.3.1.3/ChasingBottoms.haddock
haddock-html: /usr/share/doc/libghc-chasingbottoms-doc/html/
|