{-# LANGUAGE ExistentialQuantification, RankNTypes #-}
module Network.TLS.RNG
    ( StateRNG(..)
    , withTLSRNG
    ) where

import Crypto.Random

data StateRNG = forall g . CPRG g => StateRNG g

instance Show StateRNG where
    show _ = "rng[..]"

withTLSRNG :: StateRNG -> (forall g . CPRG g => g -> (a,g)) -> (a, StateRNG)
withTLSRNG (StateRNG rng) f = let (a, rng') = f rng
                               in (a, StateRNG rng')