packages feed

text-show-3.0.1: tests/Instances/GHC/Stack.hs

{-# LANGUAGE CPP #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

{-|
Module:      Instances.GHC.Stack
Copyright:   (C) 2014-2016 Ryan Scott
License:     BSD-style (see the file LICENSE)
Maintainer:  Ryan Scott
Stability:   Provisional
Portability: GHC

'Arbitrary' instances for 'CallStack' and 'SrcLoc'.
-}
module Instances.GHC.Stack () where

-- Ideally, we'd also define these instances for base-4.8.1 and up, but the
-- constructors for CallStack and SrcLoc aren't exposed prior to base-4.9, and
-- the API doesn't provide any way to construct values of those types, so we're
-- pretty much out of luck.
#if MIN_VERSION_base(4,9,0)
import GHC.Stack.Types (CallStack(..), SrcLoc(..))

import Instances.Utils ((<@>))

import Test.QuickCheck (Arbitrary(..), oneof)

instance Arbitrary CallStack where
    arbitrary = oneof [ pure EmptyCallStack
                      , PushCallStack <$> arbitrary <@> EmptyCallStack
                      , pure $ FreezeCallStack EmptyCallStack
                      ]

instance Arbitrary SrcLoc where
    arbitrary = SrcLoc <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary
                       <*> arbitrary <*> arbitrary <*> arbitrary
#endif