-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Approximate discrete values and numbers -- @package approximate @version 0.2.2 module Data.Approximate.Type -- | An approximate number, with a likely interval, an expected value and a -- lower bound on the log of probability that the answer falls -- in the interval. -- -- NB: The probabilities associated with confidence are stored in -- the log domain. data Approximate a Approximate :: {-# UNPACK #-} !(Log Double) -> a -> a -> a -> Approximate a class HasApproximate c_aiA7 a_acnH | c_aiA7 -> a_acnH where confidence = (.) approximate confidence estimate = (.) approximate estimate hi = (.) approximate hi lo = (.) approximate lo approximate :: HasApproximate c_aiA7 a_acnH => Lens' c_aiA7 (Approximate a_acnH) confidence :: HasApproximate c_aiA7 a_acnH => Lens' c_aiA7 (Log Double) estimate :: HasApproximate c_aiA7 a_acnH => Lens' c_aiA7 a_acnH hi :: HasApproximate c_aiA7 a_acnH => Lens' c_aiA7 a_acnH lo :: HasApproximate c_aiA7 a_acnH => Lens' c_aiA7 a_acnH exact :: Eq a => Prism' (Approximate a) a zero :: (Num a, Eq a) => Prism' (Approximate a) () one :: (Num a, Eq a) => Prism' (Approximate a) () withMin :: Ord a => a -> Approximate a -> Approximate a withMax :: Ord a => a -> Approximate a -> Approximate a instance (Ord a, Num a) => Num (Approximate a) instance Applicative Approximate instance Apply Approximate instance Pointed Approximate instance Copointed Approximate instance Traversable Approximate instance Foldable Approximate instance Functor Approximate instance NFData a => NFData (Approximate a) instance Unbox a => Vector Vector (Approximate a) instance Unbox a => MVector MVector (Approximate a) instance Unbox a => Unbox (Approximate a) instance Serial1 Approximate instance Serial a => Serial (Approximate a) instance Hashable1 Approximate instance Hashable a => Hashable (Approximate a) instance Serialize a => SafeCopy (Approximate a) instance Serialize a => Serialize (Approximate a) instance Binary a => Binary (Approximate a) instance HasApproximate (Approximate a0) a0 instance Typeable Approximate instance Eq a => Eq (Approximate a) instance Show a => Show (Approximate a) instance Read a => Read (Approximate a) instance Data a => Data (Approximate a) instance Generic (Approximate a) instance Datatype D1Approximate instance Constructor C1_0Approximate instance Selector S1_0_0Approximate instance Selector S1_0_1Approximate instance Selector S1_0_2Approximate instance Selector S1_0_3Approximate -- | These functions provide wildly inaccurate but very fast approximations -- to common transcendental functions. -- -- The algorithms here are based on Martin Ankerl's optimized -- pow, -- http://martin.ankerl.com/2007/10/04/optimized-pow-approximation-for-java-and-c-c/ -- which is in turn based on -- http://nic.schraudolph.org/pubs/Schraudolph99.pdf module Data.Approximate.Numerics class Floating a => Fast a flog :: Fast a => a -> a flog_lb :: Fast a => a -> a flog_ub :: Fast a => a -> a fexp :: Fast a => a -> a fexp_lb :: Fast a => a -> a fexp_ub :: Fast a => a -> a fpow :: Fast a => a -> a -> a fpow_lb :: Fast a => a -> a -> a fpow_ub :: Fast a => a -> a -> a -- | Borchardt’s Algorithm from “Dead Reckoning: Calculating without -- instruments”. -- -- This is a remarkably bad approximate logarithm. -- -- flog had better outperform it! It is provided merely for -- comparison. blog :: Floating a => a -> a instance Fast Double instance Fast Float module Data.Approximate.Mass -- | A quantity with a lower-bound on its probability mass. This represents -- a 'probable value' as a Monad that you can use to calculate -- progressively less likely consequences. -- -- NB: These probabilities are all stored in the log domain. This -- enables us to retain accuracy despite very long multiplication chains. -- We never add these probabilities so the additional overhead of working -- in the log domain is never incurred, except on transitioning in and -- out. -- -- This is most useful for discrete types, such as small Integral -- instances or a Bounded Enum like Bool. -- -- Also note that (&?) and (|?) are -- able to use knowledge about the function to get better precision on -- their results than naively using liftA2 -- (&&) data Mass a Mass :: {-# UNPACK #-} !(Log Double) -> a -> Mass a -- | Calculate the logical or of two booleans with confidence -- lower bounds. (|?) :: Mass Bool -> Mass Bool -> Mass Bool -- | Calculate the logical and of two booleans with confidence -- lower bounds. (&?) :: Mass Bool -> Mass Bool -> Mass Bool -- | Calculate the exclusive or of two booleans with confidence -- lower bounds. (^?) :: Mass Bool -> Mass Bool -> Mass Bool instance Typeable Mass instance Eq a => Eq (Mass a) instance Ord a => Ord (Mass a) instance Show a => Show (Mass a) instance Read a => Read (Mass a) instance Data a => Data (Mass a) instance Generic (Mass a) instance Datatype D1Mass instance Constructor C1_0Mass instance ComonadApply Mass instance Comonad Mass instance Extend Mass instance Monad Mass instance Bind Mass instance Semigroup a => Semigroup (Mass a) instance Monoid a => Monoid (Mass a) instance Applicative Mass instance Copointed Mass instance Pointed Mass instance Apply Mass instance Traversable Mass instance NFData a => NFData (Mass a) instance Unbox a => Vector Vector (Mass a) instance Unbox a => MVector MVector (Mass a) instance Foldable Mass instance Functor Mass instance Serial a => Serial (Mass a) instance Serial1 Mass instance Hashable1 Mass instance Hashable a => Hashable (Mass a) instance Serialize a => SafeCopy (Mass a) instance Serialize a => Serialize (Mass a) instance Binary a => Binary (Mass a) module Data.Approximate