ddc-core-0.3.1.1: DDC/Core/Exp/NFData.hs
module DDC.Core.Exp.NFData where
import DDC.Core.Exp.Base
import Control.DeepSeq
instance (NFData a, NFData n) => NFData (Exp a n) where
rnf xx
= case xx of
XVar a u -> rnf a `seq` rnf u
XCon a dc -> rnf a `seq` rnf dc
XLAM a b x -> rnf a `seq` rnf b `seq` rnf x
XLam a b x -> rnf a `seq` rnf b `seq` rnf x
XApp a x1 x2 -> rnf a `seq` rnf x1 `seq` rnf x2
XLet a lts x -> rnf a `seq` rnf lts `seq` rnf x
XCase a x alts -> rnf a `seq` rnf x `seq` rnf alts
XCast a c x -> rnf a `seq` rnf c `seq` rnf x
XType t -> rnf t
XWitness w -> rnf w
instance (NFData a, NFData n) => NFData (Cast a n) where
rnf cc
= case cc of
CastWeakenEffect e -> rnf e
CastWeakenClosure xs -> rnf xs
CastPurify w -> rnf w
CastForget w -> rnf w
instance (NFData a, NFData n) => NFData (Lets a n) where
rnf lts
= case lts of
LLet mode b x -> rnf mode `seq` rnf b `seq` rnf x
LRec bxs -> rnf bxs
LLetRegions bs1 bs2 -> rnf bs1 `seq` rnf bs2
LWithRegion u -> rnf u
instance NFData n => NFData (LetMode n) where
rnf mode
= case mode of
LetStrict -> ()
LetLazy mw -> rnf mw
instance (NFData a, NFData n) => NFData (Alt a n) where
rnf aa
= case aa of
AAlt w x -> rnf w `seq` rnf x
instance NFData n => NFData (Pat n) where
rnf pp
= case pp of
PDefault -> ()
PData dc bs -> rnf dc `seq` rnf bs
instance NFData n => NFData (Witness n) where
rnf ww
= case ww of
WVar u -> rnf u
WCon c -> rnf c
WApp w1 w2 -> rnf w1 `seq` rnf w2
WJoin w1 w2 -> rnf w1 `seq` rnf w2
WType tt -> rnf tt
instance NFData n => NFData (WiCon n) where
rnf wi
= case wi of
WiConBuiltin wb -> rnf wb
WiConBound u t -> rnf u `seq` rnf t
instance NFData WbCon