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