packages feed

generic-arbitrary-1.0.0: test/LimitationDemo.hs

module LimitationDemo where

import           Control.DeepSeq
import           GHC.Generics                      (Generic)
import           Test.QuickCheck
import           Test.QuickCheck.Arbitrary.Generic

-- As you can see, we have this instance generated, but it will definitely lead
-- to generating an infinite term (and the only term). The recursion detection
-- doesn't work here
data R1 = R1 R2
  deriving (Eq, Ord, Show, Generic)
  deriving anyclass NFData
#if MIN_VERSION_QuickCheck(2, 14, 0)
  deriving Arbitrary via (GenericArbitrary R1)
#else
instance Arbitrary R1 where
  arbitrary = genericArbitrary
  shrink = genericShrink
#endif

data R2 = R2 R1
  deriving (Eq, Ord, Show, Generic)
  deriving anyclass NFData
#if MIN_VERSION_QuickCheck(2, 14, 0)
  deriving Arbitrary via (GenericArbitrary R2)
#else
instance Arbitrary R2 where
  arbitrary = genericArbitrary
  shrink = genericShrink
#endif

-- To force the instance realy be generated
usage :: IO ()
usage = do
  r1 :: R1 <- generate arbitrary
  print r1 -- haha