{-#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