diff options
Diffstat (limited to 'src/Verismith/Utils.hs')
-rw-r--r-- | src/Verismith/Utils.hs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/Verismith/Utils.hs b/src/Verismith/Utils.hs new file mode 100644 index 0000000..1f5dd01 --- /dev/null +++ b/src/Verismith/Utils.hs @@ -0,0 +1,29 @@ +{-| +Module : Verismith +Description : Verismith +Copyright : (c) 2020, Yann Herklotz +License : GPL-3 +Maintainer : yann [at] yannherklotz [dot] com +Stability : experimental +Portability : POSIX +-} + +module Verismith.Utils + (generateByteString) +where + +import System.Random (mkStdGen, newStdGen, randoms) +import Data.ByteString (ByteString, pack) + +generateByteString :: (Maybe Int) -> Int -> Int -> IO [ByteString] +generateByteString mseed size n = do + fmap pack . chunksOf size . take (size * n) . randoms <$> + case mseed of + Just seed' -> return $ mkStdGen seed' + Nothing -> newStdGen + where + chunksOf i _ | i <= 0 = error $ "chunksOf, number must be positive, got " ++ show i + chunksOf i xs = repeatedly (splitAt i) xs + repeatedly _ [] = [] + repeatedly f as = b : repeatedly f as' + where (b, as') = f as |