/u- None!"&(+,-./123468=HJKM!Generic reduction to normal form.2This function is a generic implementation of the  / function that can be used to instantiate the   class in deepseq.Assuming you have a   instance for your datatype T, you can use  as follows: $instance NFData T where rnf = grnf  None!"&(+,-./123468=HJKM"Generic computation of a skeleton.A skeleton for a record type has a defined "spine" but is undefined everywhere else. For instance, a skeleton for pairs would be (undefined, undefined)cWe introduce a type class for this purpose because the skeleton for nested records would look like #(undefined, (undefined, undefined))The default instance of I applies to record types; for everything else, use undefined (or error): 3instance Skeleton SomeRecordType -- no where clauseor >instance Skeleton SomeNonRecordType where skeleton = undefinedHThis is an example of how SOP-style generic functions can be used with DefaultSignatures.Furthermore, metadata is used in order to produce better error messages. For the undefined components of a record, an error is triggered that mentions the name of the field.Returns a skeleton. Compute a "spine" for single constructor datatype. That is, a valid of that type with a defined spine but undefined everywhere else. For record types we give "error" values that mention the names of the fields.  None!"&(+,-./123468=HJKM Generic show.YThis function is a proof-of-concept implementation of a function that is similar to the , function you get by using 'deriving Show'.It serves as an example of an SOP-style generic function that makes use of metadata. However, it does currently not handle parentheses correctly, and is therefore not really usable as a replacement.+If you want to use it anyway on a datatype T for which you have a   instance, you can use  as follows: $instance Show T where show = gshowNone!"&(+,-./123468=HJKM(Generic generation of random test cases.AThis function is a proof-of-concept implementation of a generic % that can be used to instantiate the  class in  QuickCheck.$If you want to use it on a datatype T for which you have a   instance, you can say: 3instance Arbitrary T where arbitrary = garbitraryNote that currently no attempts are being made to generate arbitrary values of a particular size, and it is possible that this function diverges for recursive structures.None!"&(+,-./123468=HJKMGeneric equality.PThis function reimplements the built-in generic equality that you get by using  deriving Eq.Assuming you have a   instance for a datatype T, you can use  as follows:  instance Eq T where (==) = geq      !"#$%&'()*+,basic-sop-0.1.0.2Generics.SOP.ArbitraryGenerics.SOP.NFDataGenerics.SOP.SkeletonGenerics.SOP.ShowGenerics.SOP.EqQuickCheck-2.7.5Test.QuickCheck.Arbitraryshrink arbitrary ArbitrarygrnfSkeletonskeletongshow garbitrarygeqdeepseq-1.3.0.2Control.DeepSeqrnfNFDatagenerics-sop-0.1.0.2Generics.SOP.UniverseGenericp gskeleton gskeleton' gskeletonForspineWithNames addFieldNameps$fSkeletonText$fSkeletonBool$fSkeletonRatio$fSkeletonDouble $fSkeletonInt$fSkeletonMaybe $fSkeleton[]baseGHC.Showshowgshow' goConstructorgoField