From bbed5b501c0c291e816d1e30b49dd1a785e984a0 Mon Sep 17 00:00:00 2001 From: Mathias Fussenegger <f.mathias@zignar.net> Date: Sun, 16 Dec 2018 15:51:06 +0100 Subject: [PATCH] Make fromRegex type less concrete --- src/Fake.hs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Fake.hs b/src/Fake.hs index 09a1f1d..1925d40 100644 --- a/src/Fake.hs +++ b/src/Fake.hs @@ -167,7 +167,7 @@ rndListItem xs = do pure . Just $ xs !! idx -rndSetItem :: Monad m => Set.Set a -> StateT Env m a +rndSetItem :: (RandomGen g, MonadState g m) => Set.Set a -> m a rndSetItem xs = do idx <- State.state $ randomR (0, Set.size xs - 1) pure $ Set.elemAt idx xs @@ -187,11 +187,11 @@ allPossibleChars = Set.fromList [minBound..maxBound] -- -- >>> exec "fromRegex('[^0-9][0-9]B')" -- String "\211735\&4B" -fromRegex :: Monad m => T.Text -> StateT Env m Value +fromRegex :: (RandomGen g, MonadState g m) => T.Text -> m T.Text fromRegex input = case R.parseRegex input' of - (Left err) -> error $ show err - (Right (pattern, _)) -> String <$> generateText pattern + Right (pattern, _) -> generateText pattern + Left err -> error $ show err where input' = T.unpack input defaultUpper = 10 @@ -282,5 +282,5 @@ eval (FunctionCall "oneOf" args) = eval (FunctionCall "replicate" [num, expr]) = replicate num expr eval (FunctionCall "object" args) = objectFromArgs args eval (FunctionCall "fromFile" [fileName]) = fromFile fileName -eval (FunctionCall "fromRegex" [pattern]) = eval pattern >>= fromRegex . A.asText +eval (FunctionCall "fromRegex" [pattern]) = String <$> (eval pattern >>= fromRegex . A.asText) eval (FunctionCall name _) = error $ "No random generator for " <> T.unpack name