úÎRáLÛA      !"#$%&'()*+,-./0123456789:;<=>?@None&!"&(*+-0123468;=?BEGHIJKMTUAIRun a parser on a given input, lifting its errors to the context parser.Consider it a subparser.Brun type' "(Int, Char)"MRight (Type_App (Type_App (Type_Tuple 2) (Type_Con "Int")) (Type_Con "Char"))run type' "(,) Int Int"LRight (Type_App (Type_App (Type_Tuple 2) (Type_Con "Int")) (Type_Con "Int"))run type' "(,)"Right (Type_Tuple 2)run type' "()"Right (Type_Tuple 0)C run exp "(,)"Right (Exp_TupleCon 2)run exp "(1,2)"^Right (Exp_App (Exp_App (Exp_TupleCon 2) (Exp_Lit (Lit_Integer 1))) (Exp_Lit (Lit_Integer 2))) run exp "(1)"Right (Exp_Lit (Lit_Integer 1)) run exp "()"Right (Exp_TupleCon 0)D Integers get parsed as integers: run lit "2"Right (Lit_Integer 2)"Rationals get parsed as rationals: run lit "2.0"Right (Lit_Rational (2 % 1)) run lit "3e2"Right (Lit_Rational (300 % 1))+EFGHIJKLMNOPQRSTUVWXYZ[\]^_`AabBcdefghijkCD+EFGHIJKLMNOPQRSTUVWXYZ[\]^_`AabBcdefghijkCDEIHGFJK TSRQPONMLUVWX_^]\[ZY`AabBcdefghijkCDNone&!"&(*+-0123468;=?BEGHIJKMTU!A reference from a datastructure s to some part a8, which can be used to manipulate that particular part.ZGiven a lens to a subpart and a datastructure, produce the value of the referred subpart.eGiven a lens to a subpart, a new value for it and a datastructure, produce an updated datastructure.oGiven a lens to a subpart, and an update function for it, produce a function, which updates the datastructure.None(!"&(*+-0123468;=?BEGHIJKMTUA specialised version of Data.Proxy.Proxy6. Defined for compatibility with "base-4.6", since Proxy was only defined in "base-4.7".fDefines a way to access some value of a type as a field, using the string type literal functionality.KInstances are provided for all records and for tuples of arity of up to 24.&Here's how you can use it with tuples: Gtrd :: FieldOwner "3" v a => a -> v trd = getField (Field :: Field "3")JThe function above will get you the third item of any tuple, which has it. Generate a lens using the  instance. RageLens :: FieldOwner "age" v a => Lens a v ageLens = lens (Field :: Field "age") 9  !"#$%&'()*+,-./0123456789:;<6  !"#$%&'()*+,-./0123456789ÿŽ 8967452301./,-*+()&'$%"# ! ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<    !"#$%&'()*+,-./0123456789:;<None&!"&(*+-0123468;=?BEGHIJKMTU=A shorthand alias to ?.>A shorthand alias to @.?dA quasiquoter, which generates record expressions and types, depending on the context it's used in.,Here is how you can use it to declare types: btype Person = [record| {name :: String, birthday :: {year :: Int, month :: Int, day :: Int}} |]To declare functions: 9getAge :: [record| {name :: String, age :: Int} |] -> IntTo declare values: ‹person :: Person person = [record| {name = "Grigori Yakovlevich Perelman", birthday = {year = 1966, month = 6, day = 13}} |]@!A quasiquoter, which generates a L. Lens is your interface to accessing and modifying the fields of a record.Here is how you can use it: sgetPersonBirthdayYear :: Person -> Int getPersonBirthdayYear = Record.Lens.view ([lens|birthday|] . [lens|year|])IFor your convenience you can compose lenses from inside of the quotation: psetPersonBirthdayYear :: Int -> Person -> Person setPersonBirthdayYear = Record.Lens.set [lens|birthday.year|]FYou can also use this function to manipulate tuples of arity up to 24: ~mapThirdElement :: (Char -> Char) -> (Int, String, Char) -> (Int, String, Char) mapThirdElement = Record.Lens.over [lens|3|]l`Allows to specify names in types signatures, leaving the value type resolution to the compiler.E.g., d(\_ v1 _ v2 -> Record2 v1 v2) :: Types.Field n1 -> v1 -> Types.Field n2 -> v2 -> Record2 n1 v1 n2 v2[We can set the name signatures by passing proxies with explicit signatures to this lambda.=>?@mnopqrstul=>?@?@=>=>?@mnopqrstulv        !!""##$$%%&'()*+ ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST UVWXYZ[\]^_ record-0.1.4 Record.Lens Record.TypesRecord Record.ParserLensviewsetoverField FieldOwnersetFieldgetFieldlensRecord24Record23Record22Record21Record20Record19Record18Record17Record16Record15Record14Record13Record12Record11Record10Record9Record8Record7Record6Record5Record4Record3Record2Record1$fFieldOwner"1"v1Identity$fFieldOwnern1v1Record1$fFieldOwner"1"v1(,)rlrecordparsertype'explitLit Lit_Rational Lit_Integer Lit_StringLit_Char RecordExpExpExp_SigExp_ListExp_AppExp_LitExp_Nil Exp_TupleConExp_ConExp_Var Exp_Record RecordType QualifiedNameType Type_Record Type_List Type_Arrow Type_TupleType_ConType_VarType_Apprunlabeledqq recordTypequalifiedName1inBraces lowerCaseName upperCaseName symbolicIdent stringLitcharLit conLambdaExp renderLensrenderSingleLensrenderRecordTyperecordTypeNameByArityrecordConNameByArity renderType renderExprenderRecordExp renderLit