úÎ0?.—     None%&*,0123469:;<=?DOQRT"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%&*,0123469:;<=?DOQRT  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 = gshow    None%&*,0123469:;<=?DOQRT !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%&*,0123469:;<=?DOQRTGeneric 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 (==) = geqNone%&*,0123469:;<=?DOQRT(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 = garbitrary¬Note 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.       !"#$%&'()*+)*,'-(basic-sop-0.2.0.2-22OaTKWBaXDBMzBx1UtIW4Generics.SOP.ArbitraryGenerics.SOP.SkeletonGenerics.SOP.ShowGenerics.SOP.NFDataGenerics.SOP.Eq'QuickCheck-2.9.2-3a8nWdLsV8cEn9LdMoftRmTest.QuickCheck.Arbitraryshrink arbitrary ArbitrarySkeletonskeleton$fSkeletonText$fSkeletonBool$fSkeletonRatio$fSkeletonDouble $fSkeletonInt$fSkeletonMaybe $fSkeleton[]gshowgrnfgeq garbitrary gskeleton gskeleton' gskeletonForspineWithNames addFieldNamepsbaseGHC.Showshow+generics-sop-0.3.0.0-FWEhOdOpjlQ6CFdmGBqlXKGenerics.SOP.UniverseGenericgshow' goConstructorgoFieldpallpdeepseq-1.4.2.0Control.DeepSeqrnfNFData