module Test.QuickCheck.Instances.Tuple where

import Test.QuickCheck
import Control.Monad

{- | Generates a 2-tuple using its arguments to generate the parts.
-}
(>*<) :: Gen a -> Gen b -> Gen (a,b)
Gen a
x >*< :: Gen a -> Gen b -> Gen (a, b)
>*< Gen b
y = (a -> b -> (a, b)) -> Gen a -> Gen b -> Gen (a, b)
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 (,) Gen a
x Gen b
y

{- | Generates a 3-tuple using its arguments to generate the parts.
-}
(>**<) :: Gen a -> Gen b -> Gen c -> Gen (a,b,c)
>**< :: Gen a -> Gen b -> Gen c -> Gen (a, b, c)
(>**<) Gen a
x Gen b
y Gen c
z = (a -> b -> c -> (a, b, c))
-> Gen a -> Gen b -> Gen c -> Gen (a, b, c)
forall (m :: * -> *) a1 a2 a3 r.
Monad m =>
(a1 -> a2 -> a3 -> r) -> m a1 -> m a2 -> m a3 -> m r
liftM3 (,,) Gen a
x Gen b
y Gen c
z

{- | Generates a 4-tuple using its arguments to generate the parts.
-}
(>***<) :: Gen a -> Gen b -> Gen c -> Gen d -> Gen (a,b,c,d)
>***< :: Gen a -> Gen b -> Gen c -> Gen d -> Gen (a, b, c, d)
(>***<) Gen a
x Gen b
y Gen c
z Gen d
a = (a -> b -> c -> d -> (a, b, c, d))
-> Gen a -> Gen b -> Gen c -> Gen d -> Gen (a, b, c, d)
forall (m :: * -> *) a1 a2 a3 a4 r.
Monad m =>
(a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r
liftM4 (,,,) Gen a
x Gen b
y Gen c
z Gen d
a

{- | Generates a 5-tuple using its arguments to generate the parts.
-}
(>****<) :: Gen a -> Gen b -> Gen c -> Gen d -> Gen e -> Gen (a,b,c,d,e)
>****< :: Gen a -> Gen b -> Gen c -> Gen d -> Gen e -> Gen (a, b, c, d, e)
(>****<) Gen a
x Gen b
y Gen c
z Gen d
a Gen e
b= (a -> b -> c -> d -> e -> (a, b, c, d, e))
-> Gen a -> Gen b -> Gen c -> Gen d -> Gen e -> Gen (a, b, c, d, e)
forall (m :: * -> *) a1 a2 a3 a4 a5 r.
Monad m =>
(a1 -> a2 -> a3 -> a4 -> a5 -> r)
-> m a1 -> m a2 -> m a3 -> m a4 -> m a5 -> m r
liftM5 (,,,,) Gen a
x Gen b
y Gen c
z Gen d
a Gen e
b