úÎFFCÛ     None:IType synonym for  in the Q monad with the empty tuple as the inner type. This is the most common use case.Type synonym for  in the  monad.Type synonym for  in the  monad.YOnly defined for complying with the monad transformer conventions and not actually used.>A monad transformer for writing Template Haskell declarations.<The Reader contains both the base name of the table and the  of the primary key field.6If you can come up with a better name, drop me a line. Rename a   using a function on !s Extract the  PrimaryKey Get the base name  Get the name with an "Id" suffix !Get the name with an "Id'" suffix Get the name with a "T" suffix (Run the table writing sequence (or, the  if you prefer). Write a single "4Convenient syntactic sugar for application of types.ConT nm <~> ConT nm <~> ConT nm)AppT (AppT (ConT nm) (ConT nm)) (ConT nm):Convenient syntactic sugar for application of expressions.ConE nm <+> ConE nm <+> ConE nm)AppE (AppE (ConE nm) (ConE nm)) (ConE nm)/Convenient syntactic sugar for arrows in types.StarT ~> StarTAppT (AppT ArrowT StarT) StarT^Assert a condition related to the table base name and suggest following the naming convention.:Assert a list of conditions and associated error messages.-Complain about an unknown field in the table.# 5The base name of the table, without the trailing "T".The primary key field.EThe table writing sequence to be executed. The inner type is ignored.    # 666None9:;I[.Derives boilerplate code for beam table types. is equivalent to  except that > takes a second argument, the name of the primary key, while D automatically makes the first field of the record the primary key. 3makeTable ''UserT 'userNumber == makeTable' ''UserT.Derives boilerplate code for beam table types.:set -XTemplateHaskell4data UserT f = User { userNumber :: Columnar f Int }3putStrLn $(stringE . pprint =<< makeTable' ''UserT)0type User = UserT Data.Functor.Identity.Identity$deriving instance GHC.Show.Show User0instance Database.Beam.Schema.Tables.Table UserT? where data Database.Beam.Schema.Tables.PrimaryKey UserT f_0O = UserId (Database.Beam.Schema.Tables.Columnar f_0 GHC.Types.Int)+ deriving GHC.Generics.GenericT Database.Beam.Schema.Tables.primaryKey x_1 = UserId (Ghci4.userNumber x_1)type UserId (f_2 :: * ->I *) = Database.Beam.Schema.Tables.PrimaryKey UserT f_24type UserId' = UserId Data.Functor.Identity.Identity'deriving instance GHC.Show.Show UserId'[userNumberC :: Lens.Micro.Type.Lens' (UserT (Database.Beam.Schema.Tables.TableField UserT))U (Database.Beam.Schema.Tables.TableField UserT _)fUser (Database.Beam.Schema.Tables.LensFor userNumberC) = Database.Beam.Schema.Lenses.tableConfigLensesóNote: While the above example actually is a valid doctest, due to variable renaming and the pretty printer having a line break deficit it looks rather confusing. Therefore, consider the following reformatted but otherwise equivalent example: ÿ•type User = UserT Identity deriving instance Show User instance Table UserT where data PrimaryKey UserT f = UserId (Columnar f Int) deriving Generic primaryKey = UserId . userNumber type UserId f = PrimaryKey UserT f type UserId' = UserId Identity deriving instance Show UserId' userNumberC :: Lens' (UserT (TableField UserT)) (TableField UserT Int) User (LensFor userNumberC) = tableConfigLenses Note that the UserIdV type synonym is very useful when refering to other tables in fields. Consider this: \ data BlogPostT f = BlogPost { blogPostId :: Columnar f Int, blogPostAuthor :: UserId f }  is equivalent to  except that > takes a second argument, the name of the primary key, while D automatically makes the first field of the record the primary key. 3makeTable ''UserT 'userNumber == makeTable' ''UserT $%&'()*+,-WThe table type name. It should end with "T", otherwise the derived names will be bogus.The primary key field name.WThe table type name. It should end with "T", otherwise the derived names will be bogus. $%&'()*+,-./      !"#$ % &"'( )*+,-./0123456&beam-th-0.2.0.0-Jp8Er8VTwEsG523c40CVhlDatabase.Beam.TH.InternalDatabase.Beam.TH MakeTableT'' MakeTableT' MakeTable MakeTableTrunTablerenamevstnamenameIdnameId'nameT runTableTtellD<~><+>~>assert assertManyinvalidConstructor$fMonadTransMakeTableT$fFunctorMakeTableT$fApplicativeMakeTableT$fMonadMakeTableT$fMonadReaderMakeTableT$fMonadWriterMakeTableT$fMonadFailMakeTableT makeTable makeTable'template-haskellLanguage.Haskell.TH.SyntaxQbaseData.Functor.IdentityIdentity VarBangTypeNameGHC.BaseStringDecmkNameSelectorgetColTy primaryKeyTy primaryKeyFunnameInst nameTySyn nameIdTySynnameLensbaseNamemakeTableWithType recordFields firstRecord