module Generics.Instant.Functions.DeepSeq
(
grnfDefault
, RepGNFData
, GNFData(..)
) where
import Control.DeepSeq (NFData(rnf))
import Generics.Instant
grnfDefault :: (Representable a, GNFData (Rep a)) => a -> ()
grnfDefault = \a -> grnf (from a)
class (Representable a, GNFData (Rep a)) => RepGNFData a
instance (Representable a, GNFData (Rep a)) => RepGNFData a
class GNFData a where
grnf :: a -> ()
instance GNFData Z where
grnf _ = error
"Generics.Instant.Functions.DeepSeq.GNFData Z grnf - impossible"
instance GNFData U where
grnf !U = ()
instance GNFData a => GNFData (CEq c p q a) where
grnf !(C a) = grnf a `seq` ()
instance (GNFData a, GNFData b) => GNFData (a :*: b) where
grnf !(a :*: b) = grnf a `seq` grnf b `seq` ()
instance (GNFData a, GNFData b) => GNFData (a :+: b) where
grnf !(L a) = grnf a `seq` ()
grnf !(R b) = grnf b `seq` ()
instance NFData a => GNFData (Var a) where
grnf !(Var a) = rnf a `seq` ()
instance NFData a => GNFData (Rec a) where
grnf !(Rec a) = rnf a `seq` ()