aboutsummaryrefslogtreecommitdiffstats
path: root/src/Verismith/Utils.hs
blob: 1f5dd015c2f0ca64e8891ede8ec69105251fea8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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