{-|
Module      : Text.QuickCheck.StringRandom
Description : A generator of text which matches regexp
Copyright   : Copyright (C) 2016- hiratara
License     : GPL-3
Maintainer  : hiratara@cpan.org
Stability   : experimental

A text generator that generates a string that matches a regular expression.

@
    {-# LANGUAGE OverloadedStrings #-}
    import qualified Test.QuickCheck as QC
    import Test.QuickCheck.StringRandom (matchRegexp)

    prop_generateDigit :: QC.Property
    prop_generateDigit = QC.forAll (matchRegexp "\\d") $ \digit -> ...

    -- or

    newtype Upper = Upper Text.Text deriving (Eq, Show)

    instance QC.Arbitrary Upper where
      arbitrary = Upper <$> matchRegexp "[A-Z]"

    prop_generateUpper :: Upper -> Bool
    prop_generateUpper (Upper upper) = ...
@

The shrink function has not been defined yet.
-}

module Test.QuickCheck.StringRandom
  ( matchRegexp
  ) where

import qualified Data.Text as Text
import qualified Test.QuickCheck.Gen as QC
import qualified Test.QuickCheck.Random as QC
import qualified Text.StringRandom as StringRandom

-- | The 'matchRegexp pat' defines a generator that produces a text that
-- | matches a regular expression 'pat'
matchRegexp :: Text.Text -> QC.Gen Text.Text
matchRegexp txt = QC.MkGen $ \(QC.QCGen g) _ -> StringRandom.stringRandom g txt