Skip to content
This repository was archived by the owner on Jul 19, 2025. It is now read-only.

Commit c6ed233

Browse files
committed
Add a replicate provider
1 parent 0488f77 commit c6ed233

2 files changed

Lines changed: 8 additions & 1 deletion

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ a field within the JSON object.
2222
- array(expr [, expr ... ])
2323
- oneOf(arrayExpr)
2424
- oneOf(expr, expr [, expr ... ])
25+
- replicate(number, expr)
2526

2627

2728
## Installation

app/Main.hs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
module Main where
44

55

6-
import Control.Monad (forever)
6+
import Control.Monad (forever, replicateM)
77
import Control.Monad.IO.Class (liftIO)
88
import Control.Monad.Trans.State.Strict (StateT)
99
import qualified Control.Monad.Trans.State.Strict as State
@@ -112,6 +112,9 @@ asArray o = error $ "Expected an array, but received: " <> show o
112112
--
113113
-- >>> exec "oneOf(37, 42, 21)"
114114
-- Number 21.0
115+
--
116+
-- >>> exec "replicate(randomInt(2, 4), oneOf(37, 42, 21))"
117+
-- Array [Number 42.0,Number 42.0,Number 21.0,Number 42.0]
115118
eval :: Expr -> State Value
116119
eval (IntLiteral x) = pure $ Number $ fromInteger x
117120
eval (StringLiteral x) = pure $ String x
@@ -133,6 +136,9 @@ eval (FunctionCall "oneOf" [arg]) = do
133136
eval (FunctionCall "oneOf" args) = do
134137
idx <- State.state $ randomR (0, length args - 1)
135138
eval (args !! idx)
139+
eval (FunctionCall "replicate" [num, expr]) = do
140+
num' <- asInt <$> eval num
141+
Array . V.fromList <$> replicateM num' (eval expr)
136142
eval (FunctionCall name _) = pure $ String $ "No random generator for " <> name
137143

138144

0 commit comments

Comments
 (0)