crypto-rng-0.1.0.0: src/Crypto/RNG/Class.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE ConstrainedClassMethods #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE UndecidableInstances #-}
#if __GLASGOW_HASKELL__ < 710
{-# LANGUAGE OverlappingInstances #-}
#endif
module Crypto.RNG.Class where
import Control.Monad.Trans
import Crypto.Random.DRBG
import Data.ByteString (ByteString)
-- | Monads carrying around the RNG state.
class Monad m => CryptoRNG m where
-- | Generate given number of cryptographically secure random bytes.
randomBytes :: CryptoRNG m
=> ByteLength -- ^ number of bytes to generate
-> m ByteString
-- | Generic, overlapping instance.
instance {-# OVERLAPPABLE #-} (
Monad (t m)
, MonadTrans t
, CryptoRNG m
) => CryptoRNG (t m) where
randomBytes = lift . randomBytes