{-# LANGUAGE
TemplateHaskell, GADTs, RankNTypes,
MultiParamTypeClasses, FlexibleInstances, FlexibleContexts
#-}
module Data.Random.Internal.Source
( Prim(..)
, MonadRandom(..)
, RandomSource(..)
, GetPrim(..)
) where
import Data.Random.Source.Internal.Prim
import Data.Word
class Monad m => MonadRandom m where
getRandomPrim :: Prim t -> m t
getRandomPrim Prim t
PrimWord8 = m t
forall (m :: * -> *). MonadRandom m => m Word8
getRandomWord8
getRandomPrim Prim t
PrimWord16 = m t
forall (m :: * -> *). MonadRandom m => m Word16
getRandomWord16
getRandomPrim Prim t
PrimWord32 = m t
forall (m :: * -> *). MonadRandom m => m Word32
getRandomWord32
getRandomPrim Prim t
PrimWord64 = m t
forall (m :: * -> *). MonadRandom m => m Word64
getRandomWord64
getRandomPrim Prim t
PrimDouble = m t
forall (m :: * -> *). MonadRandom m => m Double
getRandomDouble
getRandomPrim (PrimNByteInteger Int
n) = Int -> m Integer
forall (m :: * -> *).
(MonadRandom m, MonadRandom m) =>
Int -> m Integer
getRandomNByteInteger Int
n
getRandomWord8 :: m Word8
getRandomWord8 = Prim Word8 -> m Word8
forall (m :: * -> *) t. MonadRandom m => Prim t -> m t
getRandomPrim Prim Word8
PrimWord8
getRandomWord16 :: m Word16
getRandomWord16 = Prim Word16 -> m Word16
forall (m :: * -> *) t. MonadRandom m => Prim t -> m t
getRandomPrim Prim Word16
PrimWord16
getRandomWord32 :: m Word32
getRandomWord32 = Prim Word32 -> m Word32
forall (m :: * -> *) t. MonadRandom m => Prim t -> m t
getRandomPrim Prim Word32
PrimWord32
getRandomWord64 :: m Word64
getRandomWord64 = Prim Word64 -> m Word64
forall (m :: * -> *) t. MonadRandom m => Prim t -> m t
getRandomPrim Prim Word64
PrimWord64
getRandomDouble :: m Double
getRandomDouble = Prim Double -> m Double
forall (m :: * -> *) t. MonadRandom m => Prim t -> m t
getRandomPrim Prim Double
PrimDouble
getRandomNByteInteger :: MonadRandom m => Int -> m Integer
getRandomNByteInteger Int
n = Prim Integer -> m Integer
forall (m :: * -> *) t. MonadRandom m => Prim t -> m t
getRandomPrim (Int -> Prim Integer
PrimNByteInteger Int
n)
class Monad m => RandomSource m s where
getRandomPrimFrom :: s -> Prim t -> m t
getRandomPrimFrom s
src Prim t
PrimWord8 = s -> m Word8
forall (m :: * -> *) s. RandomSource m s => s -> m Word8
getRandomWord8From s
src
getRandomPrimFrom s
src Prim t
PrimWord16 = s -> m Word16
forall (m :: * -> *) s. RandomSource m s => s -> m Word16
getRandomWord16From s
src
getRandomPrimFrom s
src Prim t
PrimWord32 = s -> m Word32
forall (m :: * -> *) s. RandomSource m s => s -> m Word32
getRandomWord32From s
src
getRandomPrimFrom s
src Prim t
PrimWord64 = s -> m Word64
forall (m :: * -> *) s. RandomSource m s => s -> m Word64
getRandomWord64From s
src
getRandomPrimFrom s
src Prim t
PrimDouble = s -> m Double
forall (m :: * -> *) s. RandomSource m s => s -> m Double
getRandomDoubleFrom s
src
getRandomPrimFrom s
src (PrimNByteInteger Int
n) = s -> Int -> m Integer
forall (m :: * -> *) s. RandomSource m s => s -> Int -> m Integer
getRandomNByteIntegerFrom s
src Int
n
getRandomWord8From :: s -> m Word8
getRandomWord8From s
src = s -> Prim Word8 -> m Word8
forall (m :: * -> *) s t. RandomSource m s => s -> Prim t -> m t
getRandomPrimFrom s
src Prim Word8
PrimWord8
getRandomWord16From :: s -> m Word16
getRandomWord16From s
src = s -> Prim Word16 -> m Word16
forall (m :: * -> *) s t. RandomSource m s => s -> Prim t -> m t
getRandomPrimFrom s
src Prim Word16
PrimWord16
getRandomWord32From :: s -> m Word32
getRandomWord32From s
src = s -> Prim Word32 -> m Word32
forall (m :: * -> *) s t. RandomSource m s => s -> Prim t -> m t
getRandomPrimFrom s
src Prim Word32
PrimWord32
getRandomWord64From :: s -> m Word64
getRandomWord64From s
src = s -> Prim Word64 -> m Word64
forall (m :: * -> *) s t. RandomSource m s => s -> Prim t -> m t
getRandomPrimFrom s
src Prim Word64
PrimWord64
getRandomDoubleFrom :: s -> m Double
getRandomDoubleFrom s
src = s -> Prim Double -> m Double
forall (m :: * -> *) s t. RandomSource m s => s -> Prim t -> m t
getRandomPrimFrom s
src Prim Double
PrimDouble
getRandomNByteIntegerFrom :: s -> Int -> m Integer
getRandomNByteIntegerFrom s
src Int
n = s -> Prim Integer -> m Integer
forall (m :: * -> *) s t. RandomSource m s => s -> Prim t -> m t
getRandomPrimFrom s
src (Int -> Prim Integer
PrimNByteInteger Int
n)
newtype GetPrim m = GetPrim (forall t. Prim t -> m t)
instance Monad m => RandomSource m (GetPrim m) where
getRandomPrimFrom :: forall t. GetPrim m -> Prim t -> m t
getRandomPrimFrom (GetPrim forall t. Prim t -> m t
f) = Prim t -> m t
forall t. Prim t -> m t
f