h&      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a Safe-Inferred/1Extensible products(c) Samuel Schlesinger 2020MITsgschlesinger@gmail.com experimental non-portable Safe-Inferred(-/012 summerA class for folding over a  using a function which only requires that every element of the product satisfy a certain constraint.summer9A class for constructing the select function inductively.summer:Extracts the fields intended from the given selector type.summerA typeclass for creating a selection function which is valid on the given definition.summerA typeclass to rearrange and possibly remove things from a product. summerA typeclass that is useful to define the scott encoding/decoding for extensible products.summer8This is a reified pattern match on an extensible productsummerType family for replacing one type in a type level list with anothersummerA class that is used for convenience in order to make certain type signatures read more clearly.summerA type family for computing the initial segment of a type level listsummer9A type family for computing the tail of a type level listsummer;A type family for computing the length of a type level listsummer/A type family for indexing into lists of types.summerA type family for computing the index of a type in a list of types.summer8A type for constructing products with linear memory use.summerAn extensible product typesummer(Lens to modify one element of a product.summer#Cons an element onto the head of a .summerEmpty .summer Execute a , pulling out a .summer Appends two s.bsummer Creates a  with a single element.summerComputes the index of the given type in the given type level list.summer%Extract a value at a particular index summer2Takes the tail of a product after the nth element.!summer0Takes the initial length n segment of a product."summerDrop the first element of a product. Sometimes needed for better type inference and less piping around of constraints.#summer-Replaces one type with another via a function3summerShowing extensible products.(  !"#$%&'( !" $%'&#Extensible sums(c) Samuel Schlesinger 2020MITsgschlesinger@gmail.com experimental non-portable Safe-Inferred(/012E4summerUsing functions which only require constraints which are satisfied by all members of the sum.6summer6A utility typeclass which makes the implementation of 7 cleaner.7summer.A typeclass for scott encoding extensible sums;summer'The scott encoding of an extensible sumcsummer4What types does this Scott encoding have in its Sum?dsummerReturns the result type of the Scott encoding for the particular Sum's elements.>summerTransforming one sum into a sum which contains all of the same types@summerA class which checks that every type has the same tag in the first list as the second. In other words, checks if the first list is a prefix of the other.Asummer5A type family for deleting the given type from a listBsummerA class that is used for convenience in order to make certain type signatures read more clearly.CsummerA type family for computing the tag of a given type in an extensible sum. In practice, this means computing the first index of the given type in the list.esummerType family for replacing one type in a type level list with anotherDsummerThe extensible sum type, allowing inhabitants to be of any of the types in the given type list.EsummerA pattern to match on for convenience. Without this, the user facing interface is rather baroque.fsummerDeconstruct a D with only one variantFsummer0A prism which operates on a chosen variant of a DGsummerComputes the tag of the given type in the given type level list.Hsummer'Injects a type into the extensible sum.Isummer1Inspects an extensible sum for a particular type.JsummerConsider a certain type, discarding it as an option if it is not the correct one.KsummerConsider the first type in the list of possibilities, a useful specialization for type inference.Lsummer,Transforms one type in the sum into another.Msummer?Transform one type in one sum into another type in another sum.NsummerA free version of weakening, where all you're doing is adding more possibilities at exclusively higher tags.Psummer%Testing extensible sums for equality.asummerShowing extensible sums.45678:9;<=>?@ABCDEFGHIJKLMNDEGHIJKF<=78:96CBA@;>?NLM45      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi%summer-0.3.7.2-C318OGPUxpR6rVSm0KtJ4c Data.Prodder Data.Summer Data.ForAllForAllFoldProdfoldProd SelectionselectFieldsFromSelectorSelector Strengthen strengthenPConsumeconsumeproduceBextend1cmapConsumerReplace<> HasIndexInInitTailLengthIndexIndexIn ProdBuilderProdatTypeconsBemptyB buildProdappendBindexextracttailNinitN dropFirstremapproduceempty strengthentoList$fEqProd $fEqProd0$fHasIndexInkxxs $fConsume: $fConsume[]$fStrengthenxs[]$fStrengthenxs:$fSelectiondefFUNa$fSelectiondefaa $fFoldProdc: $fFoldProdc[] $fShowProd ApplyFunctionapplyUnmatchMatchmatchunmatchoverrideMatcherUnorderedMatchunorderedMatchWeakenweakenHaveSameTagsInDeleteHasTagInTagInSumInjvarianttaginjectinspectconsider considerFirstinmapsmap noOpWeaken$fEqSum$fEqSum0 $fGenericSum $fGenericSum0$fHasTagInkxxs$fHaveSameTagsIn[][]::$fHaveSameTagsIn[]k[]ys$fShowTypeablex $fWeaken[]ys $fWeaken:ys$fUnorderedMatch[]r $fMatch[]$fUnorderedMatchxsFUN $fUnmatch:ys $fUnmatch[]ys$fMatch:$fApplyFunctionc:$fApplyFunctionc[] $fShowSum singletonB UnmatcherResulteject