-- | Module containing functions to get `Text` from `RandTok` module Text.Madlibs.Cata.Run where import Text.Madlibs.Internal.Types import Text.Madlibs.Internal.Utils import qualified Data.Text as T import System.Random.MWC -- | Generate randomized text from a `RandTok` run :: RandTok -> IO T.Text run tok@(List rs) = do value <-(withSystemRandom . asGenST $ \gen -> uniform gen) let ret = ((snd . head) . filter ((>=value) . fst)) $ mkCdf tok case ret of (Value txt) -> pure txt tok@(List rs) -> run tok run (Value txt) = pure txt -- | Helper function to compute the cdf when we have a pdf mkCdf :: RandTok -> [(Double, RandTok)] mkCdf (List rs) = zip (cdf . (map fst) $ rs) (map snd rs)