úÎ!ç     SafemSafeÀ  !"#$%&'SafeC  data-fix-cseÿ Marker type for creation frames of variables. Start new frame when if-block starts, create next frame when you go into the next branch of the same block (with else ir elif), stop frame when leaving the if-then-else block. Use no frame for all other expressions. data-fix-csekWith explicit sharing you provide user with the special function that encodes let-bindings for your EDSL (). You should not use - case. It's reserverd for the CSE algorithm.  data-fix-cseDirected acyclic graphs.  data-fix-cse(If plain lists are enough for your case.  data-fix-cse@Performs common subexpression elimination with implicit sharing.  data-fix-cse;Helper function to make explicit let-bindings. For exampe: Xnewtype T = T { unT :: Fix (Let f) } let_ :: T -> (T -> T) -> T let_ = letWrapper T unT data-fix-csetPerforms common subexpression elimination with explicit sharing. To make sharing explicit you can use the datatype . data-fix-cse<Monadic catamorphism for fixpoint types wrapped in the type . data-fix-cse4Catamorphism for fixpoint types wrapped in the type . data-fix-cse4Catamorphism for fixpoint types wrapped in the type . data-fix-cse´Performs common subexpression elimination with implicit sharing using information of frames. It doesn't share the variables in different branches of imperative if-then-else block.   (      !"#$ !%)data-fix-cse-0.0.3-LJ000yrgQ9C2MhWwMm7UFx Data.Fix.CseData.Fix.BiMapData.Fix.BiMapFramed FrameInfoNoFrame StartFrame StopFrame NextFrameLetLetExpLetBindLetLiftDagVarNamefromDagcse letWrapperletCse letFoldFixM letFoldFixletCataletCataM cseFramed$fShowFrameInfo $fEqFrameInfo$fOrdFrameInfoBiMapgetDag lookup_key lookup_valinsertemptysize startFrame stopFrame nextFrame