úÎ!*ë*     (Constructing records with default values(C) mniip 2019BSD3mniip@email.com experimentalSafe &'-.HSUVX partial-recordsÿÿA "graded semigroup": if we have two partial structures with only some of the fields, we can merge them to obtain a partial structure with the union of the fields. Prefers to take fields from the left hand side. Instances of this would be generated by .partial-recordsPartial T '[b1, b2, ...]& is a partial version of the datatype T3 where the first field's presence is indicated by  b1 :: Bool+, second field's presence is indicated by b25 and so on. Instances of this would be generated by .9Utility functions used by generated Template Haskell code(C) mniip 2019BSD3mniip@email.com experimentalSafe &'.=?@AHUV Y  ITemplate Haskell utilities for constructing records with default values(C) mniip 2019BSD3mniip@email.com experimentalNone%&'-.HPSUVX_k)ç partial-recordsGenerate an instance of the  family and the 4 class. Takes a data constructor name. For example: @data Foo a = Foo a { fld1 :: Int, fld2 :: a } mkToPartial ''Foo  expands to: data instance 7 (Foo a) bs where Partial_Foo :: forall a b1 b2.  b1 Int -> J b2 a -> Partial (Foo a) '[b1, b2] {-# INLINE mkfld1 #-} mkfld1 :: Int -> 3 (Foo a) '[ 'True, 'False] mkfld1 x = Partial_Foo ( x) & {-# INLINE mkfld2 #-} mkfld2 :: a -> 2 (Foo a) '[ 'False, 'True] mkfld2 x = Partial_Foo  ( x) instance  (Foo a) where {-# INLINE () #-} Partial_Foo x1 x2 & Partial_Foo y1 y1 = Partial_Foo (  x1 y1) (  x2 y2) partial-records!Generate a function that turns a ÿN into a value of the actual datatype. Takes a name for the function to be defined, as well as the type the result should have (can include type variables but all of them must be quantified), as well as the "default values": a record construction specifying just those fields that you want, with their default values. For example: |data Foo a = Foo a { fld1 :: Int, fld2 :: a } mkFromPartial "mkFoo" [t|forall a. Foo (Maybe a)|] [|Foo { fld2 = Nothing }|]  expands to: 2{-# INLINE mkFoo #-} mkFoo :: forall a b1 b2. ( a "Foo" "fld1" b1 -- ^ Assert that b1 ~ 'True but generate a nice error message if not ) => M (Foo (Maybe a)) '[b1, b2] -> Foo (Maybe a) mkFoo (Partial_Foo x1 x2) = Foo ( x1) (  Nothing x2) partial-recordsXThe default procedure for generating field constructors from field names is prepending "mk"f. You can override this behavior by passing a custom field name generating function to this function.       .partial-records-0.2.2.1-EV7KjSGsmba7IklcuH8re0 Data.PartialData.Partial.UtilsData.Partial.TH mkToPartial<||>Graded?PartialRequireunOptOptHasHasn'tjoinOptfromOpt$fRequiredcfldFalse$fRequiredcfldTrue mkFromPartialmkToPartialWith