{-# LANGUAGE BangPatterns, TypeOperators, FlexibleContexts #-}
module Control.DeepSeq.Generics
( genericRnf
, genericRnfV1
) where
import Control.DeepSeq
import GHC.Generics
genericRnf :: (Generic a, GNFData (Rep a)) => a -> ()
genericRnf :: forall a. (Generic a, GNFData (Rep a)) => a -> ()
genericRnf = Rep a (ZonkAny 1) -> ()
forall a. Rep a a -> ()
forall (f :: * -> *) a. GNFData f => f a -> ()
grnf_ (Rep a (ZonkAny 1) -> ()) -> (a -> Rep a (ZonkAny 1)) -> a -> ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Rep a (ZonkAny 1)
forall x. a -> Rep a x
forall a x. Generic a => a -> Rep a x
from
{-# INLINE genericRnf #-}
class GNFData f where
grnf_ :: f a -> ()
instance GNFData U1 where
grnf_ :: forall a. U1 a -> ()
grnf_ U1 a
U1 = ()
instance NFData a => GNFData (K1 i a) where
grnf_ :: forall a. K1 i a a -> ()
grnf_ = a -> ()
forall a. NFData a => a -> ()
rnf (a -> ()) -> (K1 i a a -> a) -> K1 i a a -> ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. K1 i a a -> a
forall k i c (p :: k). K1 i c p -> c
unK1
{-# INLINEABLE grnf_ #-}
instance GNFData a => GNFData (M1 i c a) where
grnf_ :: forall a. M1 i c a a -> ()
grnf_ = a a -> ()
forall a. a a -> ()
forall (f :: * -> *) a. GNFData f => f a -> ()
grnf_ (a a -> ()) -> (M1 i c a a -> a a) -> M1 i c a a -> ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. M1 i c a a -> a a
forall k i (c :: Meta) (f :: k -> *) (p :: k). M1 i c f p -> f p
unM1
{-# INLINEABLE grnf_ #-}
instance (GNFData a, GNFData b) => GNFData (a :*: b) where
grnf_ :: forall a. (:*:) a b a -> ()
grnf_ (a a
x :*: b a
y) = a a -> ()
forall a. a a -> ()
forall (f :: * -> *) a. GNFData f => f a -> ()
grnf_ a a
x () -> () -> ()
forall a b. a -> b -> b
`seq` b a -> ()
forall a. b a -> ()
forall (f :: * -> *) a. GNFData f => f a -> ()
grnf_ b a
y
{-# INLINEABLE grnf_ #-}
instance (GNFData a, GNFData b) => GNFData (a :+: b) where
grnf_ :: forall a. (:+:) a b a -> ()
grnf_ (L1 a a
x) = a a -> ()
forall a. a a -> ()
forall (f :: * -> *) a. GNFData f => f a -> ()
grnf_ a a
x
grnf_ (R1 b a
x) = b a -> ()
forall a. b a -> ()
forall (f :: * -> *) a. GNFData f => f a -> ()
grnf_ b a
x
{-# INLINEABLE grnf_ #-}
genericRnfV1 :: (Generic a, GNFDataV1 (Rep a)) => a -> ()
genericRnfV1 :: forall a. (Generic a, GNFDataV1 (Rep a)) => a -> ()
genericRnfV1 = Rep a (ZonkAny 0) -> ()
forall a. Rep a a -> ()
forall (f :: * -> *) a. GNFDataV1 f => f a -> ()
grnfV1_ (Rep a (ZonkAny 0) -> ()) -> (a -> Rep a (ZonkAny 0)) -> a -> ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Rep a (ZonkAny 0)
forall x. a -> Rep a x
forall a x. Generic a => a -> Rep a x
from
{-# INLINE genericRnfV1 #-}
class GNFDataV1 f where
grnfV1_ :: f a -> ()
instance GNFDataV1 V1 where
grnfV1_ :: forall a. V1 a -> ()
grnfV1_ = [Char] -> V1 a -> ()
forall a. HasCallStack => [Char] -> a
error [Char]
"Control.DeepSeq.Generics.genericRnfV1: uninhabited type"
instance GNFDataV1 U1 where
grnfV1_ :: forall a. U1 a -> ()
grnfV1_ U1 a
U1 = ()
instance NFData a => GNFDataV1 (K1 i a) where
grnfV1_ :: forall a. K1 i a a -> ()
grnfV1_ = a -> ()
forall a. NFData a => a -> ()
rnf (a -> ()) -> (K1 i a a -> a) -> K1 i a a -> ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. K1 i a a -> a
forall k i c (p :: k). K1 i c p -> c
unK1
{-# INLINEABLE grnfV1_ #-}
instance GNFDataV1 a => GNFDataV1 (M1 i c a) where
grnfV1_ :: forall a. M1 i c a a -> ()
grnfV1_ = a a -> ()
forall a. a a -> ()
forall (f :: * -> *) a. GNFDataV1 f => f a -> ()
grnfV1_ (a a -> ()) -> (M1 i c a a -> a a) -> M1 i c a a -> ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. M1 i c a a -> a a
forall k i (c :: Meta) (f :: k -> *) (p :: k). M1 i c f p -> f p
unM1
{-# INLINEABLE grnfV1_ #-}
instance (GNFDataV1 a, GNFDataV1 b) => GNFDataV1 (a :*: b) where
grnfV1_ :: forall a. (:*:) a b a -> ()
grnfV1_ (a a
x :*: b a
y) = a a -> ()
forall a. a a -> ()
forall (f :: * -> *) a. GNFDataV1 f => f a -> ()
grnfV1_ a a
x () -> () -> ()
forall a b. a -> b -> b
`seq` b a -> ()
forall a. b a -> ()
forall (f :: * -> *) a. GNFDataV1 f => f a -> ()
grnfV1_ b a
y
{-# INLINEABLE grnfV1_ #-}
instance (GNFDataV1 a, GNFDataV1 b) => GNFDataV1 (a :+: b) where
grnfV1_ :: forall a. (:+:) a b a -> ()
grnfV1_ (L1 a a
x) = a a -> ()
forall a. a a -> ()
forall (f :: * -> *) a. GNFDataV1 f => f a -> ()
grnfV1_ a a
x
grnfV1_ (R1 b a
x) = b a -> ()
forall a. b a -> ()
forall (f :: * -> *) a. GNFDataV1 f => f a -> ()
grnfV1_ b a
x
{-# INLINEABLE grnfV1_ #-}