module Data.Random.Distribution.Exponential where
import Data.Random.Source
import Data.Random.RVar
import Data.Random.Distribution
import Data.Random.Distribution.Uniform
data Exponential a = Exp a
realFloatExponential :: RealFloat a => a -> RVar a
realFloatExponential lambdaRecip = do
x <- realFloatStdUniform
return (negate (log x) * lambdaRecip)
exponential :: Distribution Exponential a => a -> RVar a
exponential = sample . Exp
instance (RealFloat a) => Distribution Exponential a where
rvar (Exp lambdaRecip) = realFloatExponential lambdaRecip