module Generics.Instant.Functions.DeepSeq
(
grnf
, GNFData
) where
import Control.DeepSeq (NFData(rnf))
import Generics.Instant
grnf :: (Representable a, GNFData (Rep a)) => a -> ()
grnf = \a -> grnf' (from 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` ()