úÎ õ     Safe-Inferred     Safe-InferredFWith 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. Directed acyclic graphs. *If plain lists are enough for your case. CPerforms common subexpression elimination with implicit sharing. /Helper function to make explicit let-bindings.  For exampe: & newtype T = T { unT :: Fix (Let f) }   let_ :: T -> (T -> T) -> T  let_ = letWrapper T unT CPerforms common subexpression elimination with explicit sharing. 3 To make sharing explicit you can use the datatype . <Monadic catamorphism for fixpoint types wrapped in the type . 4Catamorphism for fixpoint types wrapped in the type .             data-fix-cse-0.0.1 Data.Fix.CseData.Fix.BiMapLetLetLiftLetBindLetExpDagVarNamefromDagcse letWrapperletCseletCataMletCataBiMapgetDag lookup_key lookup_valinsertemptysize $fShowBiMaphashcons