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