    {-# LANGUAGE FlexibleContexts #-}
    {-# LANGUAGE ConstraintKinds #-}
    module Test.Hspec.QuickCheck (
    -- * Params
      modifyArgs
    , modifyMaxSuccess
    , modifyMaxDiscardRatio
    , modifyMaxSize
    , modifyMaxShrinks

    -- * Shortcuts
    , prop
    , xprop
    , fprop
    ) where

    import           Test.Hspec
    import           Test.QuickCheck
    import           Test.Hspec.Core.QuickCheck

    -- |
    -- > prop ".." $
    -- >   ..
    --
    -- is a shortcut for
    --
    -- @
    -- `it` ".." $ `property` $
    --   ..
    -- @
    prop :: (HasCallStack, Testable prop) => String -> prop -> Spec
    prop :: forall prop.
    (HasCallStack, Testable prop) =>
    String -> prop -> Spec
    prop String
    s = String -> Property -> SpecWith (Arg Property)
    forall a.
    (HasCallStack, Example a) =>
    String -> a -> SpecWith (Arg a)
    it String
    s (Property -> Spec) -> (prop -> Property) -> prop -> Spec
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . prop -> Property
    forall prop. Testable prop => prop -> Property
    property

    -- |
    -- > xprop ".." $
    -- >   ..
    --
    -- is a shortcut for
    --
    -- @
    -- `xit` ".." $ `property` $
    --   ..
    -- @
    xprop :: (HasCallStack, Testable prop) => String -> prop -> Spec
    xprop :: forall prop.
    (HasCallStack, Testable prop) =>
    String -> prop -> Spec
    xprop String
    s = String -> Property -> SpecWith (Arg Property)
    forall a.
    (HasCallStack, Example a) =>
    String -> a -> SpecWith (Arg a)
    xit String
    s (Property -> Spec) -> (prop -> Property) -> prop -> Spec
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . prop -> Property
    forall prop. Testable prop => prop -> Property
    property

    -- |
    -- > fprop ".." $
    -- >   ..
    --
    -- is a shortcut for
    --
    -- @
    -- `fit` ".." $ `property` $
    --   ..
    -- @
    fprop :: (HasCallStack, Testable prop) => String -> prop -> Spec
    fprop :: forall prop.
    (HasCallStack, Testable prop) =>
    String -> prop -> Spec
    fprop String
    s = String -> Property -> SpecWith (Arg Property)
    forall a.
    (HasCallStack, Example a) =>
    String -> a -> SpecWith (Arg a)
    fit String
    s (Property -> Spec) -> (prop -> Property) -> prop -> Spec
    forall b c a. (b -> c) -> (a -> b) -> a -> c
    . prop -> Property
    forall prop. Testable prop => prop -> Property
    property