ddc-source-tetra-0.4.3.1: DDC/Source/Tetra/Exp/NFData.hs
{-# LANGUAGE UndecidableInstances #-}
module DDC.Source.Tetra.Exp.NFData where
import DDC.Source.Tetra.Exp.Generic
import qualified DDC.Type.Exp.Generic.NFData as T
import Control.DeepSeq
---------------------------------------------------------------------------------------------------
type NFDataLanguage l
= ( NFData l, T.NFDataLanguage l
, NFData (GXAnnot l)
, NFData (GXBindVar l), NFData (GXBoundVar l)
, NFData (GXBindCon l), NFData (GXBoundCon l)
, NFData (GXPrim l))
instance NFDataLanguage l => NFData (GExp l) where
rnf xx
= case xx of
XAnnot a x -> rnf a `seq` rnf x
XVar u -> rnf u
XPrim p -> rnf p
XCon dc -> rnf dc
XLAM b x -> rnf b `seq` rnf x
XLam b x -> rnf b `seq` rnf x
XApp x1 x2 -> rnf x1 `seq` rnf x2
XLet lts x -> rnf lts `seq` rnf x
XCase x alts -> rnf x `seq` rnf alts
XCast c x -> rnf c `seq` rnf x
XType t -> rnf t
XWitness w -> rnf w
XDefix a xs -> rnf a `seq` rnf xs
XInfixOp a s -> rnf a `seq` rnf s
XInfixVar a s -> rnf a `seq` rnf s
XMatch a as x -> rnf a `seq` rnf as `seq` rnf x
XWhere a cl x -> rnf a `seq` rnf cl `seq` rnf x
XLamPat a w mt x -> rnf a `seq` rnf w `seq` rnf mt `seq` rnf x
XLamCase a as -> rnf a `seq` rnf as
instance NFDataLanguage l => NFData (GXBindVarMT l) where
rnf (XBindVarMT b mt)
= rnf b `seq` rnf mt
instance NFDataLanguage l => NFData (GClause l) where
rnf cc
= case cc of
SSig a b t -> rnf a `seq` rnf b `seq` rnf t
SLet a b ps gxs -> rnf a `seq` rnf b `seq` rnf ps `seq` rnf gxs
instance NFDataLanguage l => NFData (GParam l) where
rnf pp
= case pp of
MType b mt -> rnf b `seq` rnf mt
MWitness b mt -> rnf b `seq` rnf mt
MValue p mt -> rnf p `seq` rnf mt
instance NFDataLanguage l => NFData (GLets l) where
rnf lts
= case lts of
LLet b x -> rnf b `seq` rnf x
LRec bxs -> rnf bxs
LPrivate bs1 mR bs2 -> rnf bs1 `seq` rnf mR `seq` rnf bs2
LGroup cs -> rnf cs
instance NFDataLanguage l => NFData (GAltCase l) where
rnf aa
= case aa of
AAltCase w gxs -> rnf w `seq` rnf gxs
instance NFDataLanguage l => NFData (GAltMatch l) where
rnf aa
= case aa of
AAltMatch gs -> rnf gs
instance NFDataLanguage l => NFData (GPat l) where
rnf pp
= case pp of
PDefault -> ()
PAt b p -> rnf b `seq` rnf p
PVar b -> rnf b
PData dc bs -> rnf dc `seq` rnf bs
instance NFDataLanguage l => NFData (GGuardedExp l) where
rnf gx
= case gx of
GGuard g gx' -> rnf g `seq` rnf gx'
GExp x -> rnf x
instance NFDataLanguage l => NFData (GGuard l) where
rnf gg
= case gg of
GPred x -> rnf x
GPat p x -> rnf p `seq` rnf x
GDefault -> ()
instance NFDataLanguage l => NFData (GCast l) where
rnf cc
= case cc of
CastWeakenEffect e -> rnf e
CastPurify w -> rnf w
CastBox -> ()
CastRun -> ()
instance NFDataLanguage l => NFData (GWitness l) where
rnf ww
= case ww of
WAnnot a w -> rnf a `seq` rnf w
WVar u -> rnf u
WCon c -> rnf c
WApp w1 w2 -> rnf w1 `seq` rnf w2
WType t -> rnf t
instance NFDataLanguage l => NFData (GWiCon l) where
rnf wc
= case wc of
WiConBound u t -> rnf u `seq` rnf t