{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
module Data.Comp.DeepSeq
(
NFDataF(..)
)
where
import Control.DeepSeq
import Data.Comp.Annotation
import Data.Comp.Derive
import Data.Comp.Term
instance (NFDataF f, NFData a) => NFData (Cxt h f a) where
rnf :: Cxt h f a -> ()
rnf (Hole a
x) = a -> ()
forall a. NFData a => a -> ()
rnf a
x
rnf (Term f (Cxt h f a)
x) = f (Cxt h f a) -> ()
forall (f :: * -> *) a. (NFDataF f, NFData a) => f a -> ()
rnfF f (Cxt h f a)
x
instance (NFDataF f, NFData a) => NFDataF (f :&: a) where
rnfF :: (:&:) f a a -> ()
rnfF (f a
f :&: a
a) = f a -> ()
forall (f :: * -> *) a. (NFDataF f, NFData a) => f a -> ()
rnfF f a
f () -> () -> ()
`seq` a -> ()
forall a. NFData a => a -> ()
rnf a
a
$(derive [liftSum] [''NFDataF])
$(derive [makeNFDataF] [''Maybe, ''[], ''(,)])