úι     *Class of types which can be parsed from a  . 7 These types are typically single-constructor records. !Instances may be generated using Text.RowRecord.TH. /Class of field types which can be decoded from . The input can be  to represent a missing field.  The instance Field a => Field (Maybe a) models optional fields. 8If your record contains custom types, you must create a  @ instance for each. If you have base types but need different ! parsing behavior, you can use a newtype wrapper. $Possible errors from parsing a row. A parse result.   A table.  A row of  data. Identifies a column. Convert a list of  rows into a  . % Uses the first row as column names.  in .  Implement  for a required field. Decode a field by column name. *Called from TH-generated code, but may be  useful independently. Parse a whole table.       Generate a ' instance for each of the named types. >Each type must have exactly one constructor, in record style. KColumn names are derived from the record field names by dropping the first  '_'G-separated component. This allows for a prefix to disambiguate record  labels between types. For example, with   data Foo = Foo  { f_bar :: String  , f_baz :: Int }  $(rowRecords [''Foo]) we can parse files of the form   bar,baz  abc,3  def,5 $assuming an appropriate CSV parser.       ! rowrecord-0.1Text.RowRecordText.RowRecord.THParseRowparseRowFielddecodeRowErrorNoParse MissingFieldResultFailureSuccessTableRowColumn fromStringssafeReadrequiregetField parseTable rowRecordsbaseGHC.BaseString Data.MaybeNothing Text.ReadreadMaybe getColumn rowRecordfromCon