{-# LANGUAGE MultiParamTypeClasses #-}{-# LANGUAGE FunctionalDependencies #-}{-# LANGUAGE FlexibleInstances #-}{-# LANGUAGE UndecidableInstances #-}{- |
Portability: Multi-parameter type class with functional dependency
Abstract interface to probabilistic objects
like random generators and probability distributions.
It allows to use the same code
both for computing complete distributions
and for generating random values according to the distribution.
The latter one is of course more efficient
and may be used for approximation of the distribution by simulation.
Maybe a better name is @Experiment@.
-}moduleNumeric.Probability.ObjectwhereimportqualifiedNumeric.Probability.Distribution asDistimportqualifiedNumeric.Probability.Random asRndimportqualifiedNumeric.Probability.Shape asShapeimportqualifiedData.ListasListimportqualifiedControl.Monad.Trans.ExceptasMEimportControl.Monad(liftM,)classMonadobj =>C prob obj |obj ->prob wherefromFrequencies ::[(a ,prob )]->obj a instanceC DoubleRnd.T wherefromFrequencies :: forall a. [(a, Double)] -> T a
fromFrequencies =forall prob a. (Num prob, Ord prob, Random prob) => T prob a -> T a
Rnd.pick forall b c a. (b -> c) -> (a -> b) -> a -> c
.forall prob a. Fractional prob => [(a, prob)] -> T prob a
Dist.fromFreqs instanceFractionalprob =>C prob (Dist.T prob )wherefromFrequencies :: forall a. [(a, prob)] -> T prob a
fromFrequencies =forall prob a. Fractional prob => [(a, prob)] -> T prob a
Dist.fromFreqs instanceC prob obj =>C prob (ME.ExceptTb obj )wherefromFrequencies :: forall a. [(a, prob)] -> ExceptT b obj a
fromFrequencies =forall e (m :: * -> *) a. m (Either e a) -> ExceptT e m a
ME.ExceptTforall b c a. (b -> c) -> (a -> b) -> a -> c
.forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftMforall a b. b -> Either a b
Rightforall b c a. (b -> c) -> (a -> b) -> a -> c
.forall prob (obj :: * -> *) a. C prob obj => [(a, prob)] -> obj a
fromFrequencies typeSpread obj a =[a ]->obj a shape ::(C prob obj ,Fractionalprob )=>(prob ->prob )->Spread obj a shape :: forall prob (obj :: * -> *) a.
(C prob obj, Fractional prob) =>
(prob -> prob) -> Spread obj a
shape prob -> prob
_[]=forall a. HasCallStack => [Char] -> a
error[Char]
"Probability.shape: empty list"shape prob -> prob
f [a]
xs =letincr :: prob
incr =prob
1forall a. Fractional a => a -> a -> a
/forall a b. (Integral a, Num b) => a -> b
fromIntegral(forall (t :: * -> *) a. Foldable t => t a -> Int
length[a]
xs forall a. Num a => a -> a -> a
-Int
1)ps :: [prob]
ps =forall a b. (a -> b) -> [a] -> [b]
List.mapprob -> prob
f (forall a. (a -> a) -> a -> [a]
iterate(forall a. Num a => a -> a -> a
+prob
incr )prob
0)inforall prob (obj :: * -> *) a. C prob obj => [(a, prob)] -> obj a
fromFrequencies (forall a b. [a] -> [b] -> [(a, b)]
zip[a]
xs [prob]
ps )linear ::(C prob obj ,Fractionalprob )=>Spread obj a linear :: forall prob (obj :: * -> *) a.
(C prob obj, Fractional prob) =>
Spread obj a
linear =forall prob (obj :: * -> *) a.
(C prob obj, Fractional prob) =>
(prob -> prob) -> Spread obj a
shape forall prob. Fractional prob => T prob
Shape.linear uniform ::(C prob obj ,Fractionalprob )=>Spread obj a uniform :: forall prob (obj :: * -> *) a.
(C prob obj, Fractional prob) =>
Spread obj a
uniform =forall prob (obj :: * -> *) a.
(C prob obj, Fractional prob) =>
(prob -> prob) -> Spread obj a
shape forall prob. Fractional prob => T prob
Shape.uniform negExp ::(C prob obj ,Floatingprob )=>Spread obj a negExp :: forall prob (obj :: * -> *) a.
(C prob obj, Floating prob) =>
Spread obj a
negExp =forall prob (obj :: * -> *) a.
(C prob obj, Fractional prob) =>
(prob -> prob) -> Spread obj a
shape forall prob. Floating prob => T prob
Shape.negExp normal ::(C prob obj ,Floatingprob )=>Spread obj a normal :: forall prob (obj :: * -> *) a.
(C prob obj, Floating prob) =>
Spread obj a
normal =forall prob (obj :: * -> *) a.
(C prob obj, Fractional prob) =>
(prob -> prob) -> Spread obj a
shape forall prob. Floating prob => T prob
Shape.normal enum ::(C prob obj ,Floatingprob )=>[Int]->Spread obj a enum :: forall prob (obj :: * -> *) a.
(C prob obj, Floating prob) =>
[Int] -> Spread obj a
enum =forall prob (obj :: * -> *) a.
(C prob obj, Floating prob) =>
[prob] -> Spread obj a
relative forall b c a. (b -> c) -> (a -> b) -> a -> c
.forall a b. (a -> b) -> [a] -> [b]
List.mapforall a b. (Integral a, Num b) => a -> b
fromIntegral{- |
Give a list of frequencies, they do not need to sum up to 1.
-}relative ::(C prob obj ,Floatingprob )=>[prob ]->Spread obj a relative :: forall prob (obj :: * -> *) a.
(C prob obj, Floating prob) =>
[prob] -> Spread obj a
relative [prob]
ns =forall prob (obj :: * -> *) a. C prob obj => [(a, prob)] -> obj a
fromFrequencies forall b c a. (b -> c) -> (a -> b) -> a -> c
.forall a b c. (a -> b -> c) -> b -> a -> c
flipforall a b. [a] -> [b] -> [(a, b)]
zip[prob]
ns 

AltStyle によって変換されたページ (->オリジナル) /