-- | This module provides a 'Random' instance for
-- "Data.Number.FixedPrec".

module Libraries.Synthesis.Random.FixedPrec where

import Data.Number.FixedPrec
import System.Random

instance Precision e => Random (FixedPrec e) where
  randomR (lo, hi) g = (x, g1) where
    n = getprec x  -- precision in decimal digits
    lo_n = floor (lo * 10^n)
    hi_n = floor (hi * 10^n)
    (x_n, g1) = randomR (lo_n, hi_n) g
    x = 0.1^n * fromInteger x_n
    
  random = randomR (0, 1)