sprinkles-0.6.0.0: src/Data/RandomString.hs
{-#LANGUAGE NoImplicitPrelude #-}
{-#LANGUAGE ScopedTypeVariables #-}
module Data.RandomString
( randomStr
)
where
import Web.Sprinkles.Prelude
import System.Random
randomStr :: [Char] -> Int -> IO String
randomStr alphabet desiredLength = do
let alphabetSize :: Int
alphabetSize = Web.Sprinkles.Prelude.length alphabet
when (alphabetSize < 1) $
error "randomStr: empty list of allowed characters"
items :: [String] <- forM [0..desiredLength] $ \_ -> do
i :: Int <- randomRIO (0, pred alphabetSize)
return $ take 1 . drop i $ alphabet
return $ concat items