-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Batteries included event sourcing and CQRS -- -- Please see the README on GitHub at -- https://github.com/tommyengstrom/domaindriven/tree/master/domaindriven#readme @package domaindriven @version 0.5.0 module DomainDriven.Internal.NamedFields data NF1 (name :: Symbol) (f1 :: Symbol) ty NF1 :: ty -> NF1 (name :: Symbol) (f1 :: Symbol) ty data NF2 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 NF2 :: a1 -> a2 -> NF2 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 data NF3 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 NF3 :: a1 -> a2 -> a3 -> NF3 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 data NF4 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 NF4 :: a1 -> a2 -> a3 -> a4 -> NF4 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 data NF5 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 NF5 :: a1 -> a2 -> a3 -> a4 -> a5 -> NF5 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 data NF6 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 NF6 :: a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> NF6 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 data NF7 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 NF7 :: a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> NF7 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 data NF8 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 (f8 :: Symbol) a8 NF8 :: a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> NF8 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 (f8 :: Symbol) a8 data NF9 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 (f8 :: Symbol) a8 (f9 :: Symbol) a9 NF9 :: a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> NF9 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 (f8 :: Symbol) a8 (f9 :: Symbol) a9 instance GHC.Generics.Generic (DomainDriven.Internal.NamedFields.NF1 name f1 ty) instance GHC.Show.Show ty => GHC.Show.Show (DomainDriven.Internal.NamedFields.NF1 name f1 ty) instance GHC.Generics.Generic (DomainDriven.Internal.NamedFields.NF2 name f1 a1 f2 a2) instance (GHC.Show.Show a1, GHC.Show.Show a2) => GHC.Show.Show (DomainDriven.Internal.NamedFields.NF2 name f1 a1 f2 a2) instance GHC.Generics.Generic (DomainDriven.Internal.NamedFields.NF3 name f1 a1 f2 a2 f3 a3) instance (GHC.Show.Show a1, GHC.Show.Show a2, GHC.Show.Show a3) => GHC.Show.Show (DomainDriven.Internal.NamedFields.NF3 name f1 a1 f2 a2 f3 a3) instance GHC.Generics.Generic (DomainDriven.Internal.NamedFields.NF4 name f1 a1 f2 a2 f3 a3 f4 a4) instance (GHC.Show.Show a1, GHC.Show.Show a2, GHC.Show.Show a3, GHC.Show.Show a4) => GHC.Show.Show (DomainDriven.Internal.NamedFields.NF4 name f1 a1 f2 a2 f3 a3 f4 a4) instance GHC.Generics.Generic (DomainDriven.Internal.NamedFields.NF5 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5) instance (GHC.Show.Show a1, GHC.Show.Show a2, GHC.Show.Show a3, GHC.Show.Show a4, GHC.Show.Show a5) => GHC.Show.Show (DomainDriven.Internal.NamedFields.NF5 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5) instance GHC.Generics.Generic (DomainDriven.Internal.NamedFields.NF6 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6) instance (GHC.Show.Show a1, GHC.Show.Show a2, GHC.Show.Show a3, GHC.Show.Show a4, GHC.Show.Show a5, GHC.Show.Show a6) => GHC.Show.Show (DomainDriven.Internal.NamedFields.NF6 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6) instance GHC.Generics.Generic (DomainDriven.Internal.NamedFields.NF7 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7) instance (GHC.Show.Show a1, GHC.Show.Show a2, GHC.Show.Show a3, GHC.Show.Show a4, GHC.Show.Show a5, GHC.Show.Show a6, GHC.Show.Show a7) => GHC.Show.Show (DomainDriven.Internal.NamedFields.NF7 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7) instance GHC.Generics.Generic (DomainDriven.Internal.NamedFields.NF8 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8) instance (GHC.Show.Show a1, GHC.Show.Show a2, GHC.Show.Show a3, GHC.Show.Show a4, GHC.Show.Show a5, GHC.Show.Show a6, GHC.Show.Show a7, GHC.Show.Show a8) => GHC.Show.Show (DomainDriven.Internal.NamedFields.NF8 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8) instance GHC.Generics.Generic (DomainDriven.Internal.NamedFields.NF9 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8 f9 a9) instance (GHC.Show.Show a1, GHC.Show.Show a2, GHC.Show.Show a3, GHC.Show.Show a4, GHC.Show.Show a5, GHC.Show.Show a6, GHC.Show.Show a7, GHC.Show.Show a8, GHC.Show.Show a9) => GHC.Show.Show (DomainDriven.Internal.NamedFields.NF9 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8 f9 a9) instance (GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.ToJSON.ToJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.ToJSON.ToJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.ToJSON.ToJSON a3, GHC.TypeLits.KnownSymbol f4, Data.Aeson.Types.ToJSON.ToJSON a4, GHC.TypeLits.KnownSymbol f5, Data.Aeson.Types.ToJSON.ToJSON a5, GHC.TypeLits.KnownSymbol f6, Data.Aeson.Types.ToJSON.ToJSON a6, GHC.TypeLits.KnownSymbol f7, Data.Aeson.Types.ToJSON.ToJSON a7, GHC.TypeLits.KnownSymbol f8, Data.Aeson.Types.ToJSON.ToJSON a8, GHC.TypeLits.KnownSymbol f9, Data.Aeson.Types.ToJSON.ToJSON a9) => Data.Aeson.Types.ToJSON.ToJSON (DomainDriven.Internal.NamedFields.NF9 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8 f9 a9) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.FromJSON.FromJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.FromJSON.FromJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.FromJSON.FromJSON a3, GHC.TypeLits.KnownSymbol f4, Data.Aeson.Types.FromJSON.FromJSON a4, GHC.TypeLits.KnownSymbol f5, Data.Aeson.Types.FromJSON.FromJSON a5, GHC.TypeLits.KnownSymbol f6, Data.Aeson.Types.FromJSON.FromJSON a6, GHC.TypeLits.KnownSymbol f7, Data.Aeson.Types.FromJSON.FromJSON a7, GHC.TypeLits.KnownSymbol f8, Data.Aeson.Types.FromJSON.FromJSON a8, GHC.TypeLits.KnownSymbol f9, Data.Aeson.Types.FromJSON.FromJSON a9) => Data.Aeson.Types.FromJSON.FromJSON (DomainDriven.Internal.NamedFields.NF9 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8 f9 a9) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.OpenApi.Internal.Schema.ToSchema a1, GHC.TypeLits.KnownSymbol f2, Data.OpenApi.Internal.Schema.ToSchema a2, GHC.TypeLits.KnownSymbol f3, Data.OpenApi.Internal.Schema.ToSchema a3, GHC.TypeLits.KnownSymbol f4, Data.OpenApi.Internal.Schema.ToSchema a4, GHC.TypeLits.KnownSymbol f5, Data.OpenApi.Internal.Schema.ToSchema a5, GHC.TypeLits.KnownSymbol f6, Data.OpenApi.Internal.Schema.ToSchema a6, GHC.TypeLits.KnownSymbol f7, Data.OpenApi.Internal.Schema.ToSchema a7, GHC.TypeLits.KnownSymbol f8, Data.OpenApi.Internal.Schema.ToSchema a8, GHC.TypeLits.KnownSymbol f9, Data.OpenApi.Internal.Schema.ToSchema a9) => Data.OpenApi.Internal.Schema.ToSchema (DomainDriven.Internal.NamedFields.NF9 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8 f9 a9) instance (GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.ToJSON.ToJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.ToJSON.ToJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.ToJSON.ToJSON a3, GHC.TypeLits.KnownSymbol f4, Data.Aeson.Types.ToJSON.ToJSON a4, GHC.TypeLits.KnownSymbol f5, Data.Aeson.Types.ToJSON.ToJSON a5, GHC.TypeLits.KnownSymbol f6, Data.Aeson.Types.ToJSON.ToJSON a6, GHC.TypeLits.KnownSymbol f7, Data.Aeson.Types.ToJSON.ToJSON a7, GHC.TypeLits.KnownSymbol f8, Data.Aeson.Types.ToJSON.ToJSON a8) => Data.Aeson.Types.ToJSON.ToJSON (DomainDriven.Internal.NamedFields.NF8 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.FromJSON.FromJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.FromJSON.FromJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.FromJSON.FromJSON a3, GHC.TypeLits.KnownSymbol f4, Data.Aeson.Types.FromJSON.FromJSON a4, GHC.TypeLits.KnownSymbol f5, Data.Aeson.Types.FromJSON.FromJSON a5, GHC.TypeLits.KnownSymbol f6, Data.Aeson.Types.FromJSON.FromJSON a6, GHC.TypeLits.KnownSymbol f7, Data.Aeson.Types.FromJSON.FromJSON a7, GHC.TypeLits.KnownSymbol f8, Data.Aeson.Types.FromJSON.FromJSON a8) => Data.Aeson.Types.FromJSON.FromJSON (DomainDriven.Internal.NamedFields.NF8 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.OpenApi.Internal.Schema.ToSchema a1, GHC.TypeLits.KnownSymbol f2, Data.OpenApi.Internal.Schema.ToSchema a2, GHC.TypeLits.KnownSymbol f3, Data.OpenApi.Internal.Schema.ToSchema a3, GHC.TypeLits.KnownSymbol f4, Data.OpenApi.Internal.Schema.ToSchema a4, GHC.TypeLits.KnownSymbol f5, Data.OpenApi.Internal.Schema.ToSchema a5, GHC.TypeLits.KnownSymbol f6, Data.OpenApi.Internal.Schema.ToSchema a6, GHC.TypeLits.KnownSymbol f7, Data.OpenApi.Internal.Schema.ToSchema a7, GHC.TypeLits.KnownSymbol f8, Data.OpenApi.Internal.Schema.ToSchema a8) => Data.OpenApi.Internal.Schema.ToSchema (DomainDriven.Internal.NamedFields.NF8 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7 f8 a8) instance (GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.ToJSON.ToJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.ToJSON.ToJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.ToJSON.ToJSON a3, GHC.TypeLits.KnownSymbol f4, Data.Aeson.Types.ToJSON.ToJSON a4, GHC.TypeLits.KnownSymbol f5, Data.Aeson.Types.ToJSON.ToJSON a5, GHC.TypeLits.KnownSymbol f6, Data.Aeson.Types.ToJSON.ToJSON a6, GHC.TypeLits.KnownSymbol f7, Data.Aeson.Types.ToJSON.ToJSON a7) => Data.Aeson.Types.ToJSON.ToJSON (DomainDriven.Internal.NamedFields.NF7 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.FromJSON.FromJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.FromJSON.FromJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.FromJSON.FromJSON a3, GHC.TypeLits.KnownSymbol f4, Data.Aeson.Types.FromJSON.FromJSON a4, GHC.TypeLits.KnownSymbol f5, Data.Aeson.Types.FromJSON.FromJSON a5, GHC.TypeLits.KnownSymbol f6, Data.Aeson.Types.FromJSON.FromJSON a6, GHC.TypeLits.KnownSymbol f7, Data.Aeson.Types.FromJSON.FromJSON a7) => Data.Aeson.Types.FromJSON.FromJSON (DomainDriven.Internal.NamedFields.NF7 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.OpenApi.Internal.Schema.ToSchema a1, GHC.TypeLits.KnownSymbol f2, Data.OpenApi.Internal.Schema.ToSchema a2, GHC.TypeLits.KnownSymbol f3, Data.OpenApi.Internal.Schema.ToSchema a3, GHC.TypeLits.KnownSymbol f4, Data.OpenApi.Internal.Schema.ToSchema a4, GHC.TypeLits.KnownSymbol f5, Data.OpenApi.Internal.Schema.ToSchema a5, GHC.TypeLits.KnownSymbol f6, Data.OpenApi.Internal.Schema.ToSchema a6, GHC.TypeLits.KnownSymbol f7, Data.OpenApi.Internal.Schema.ToSchema a7) => Data.OpenApi.Internal.Schema.ToSchema (DomainDriven.Internal.NamedFields.NF7 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6 f7 a7) instance (GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.ToJSON.ToJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.ToJSON.ToJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.ToJSON.ToJSON a3, GHC.TypeLits.KnownSymbol f4, Data.Aeson.Types.ToJSON.ToJSON a4, GHC.TypeLits.KnownSymbol f5, Data.Aeson.Types.ToJSON.ToJSON a5, GHC.TypeLits.KnownSymbol f6, Data.Aeson.Types.ToJSON.ToJSON a6) => Data.Aeson.Types.ToJSON.ToJSON (DomainDriven.Internal.NamedFields.NF6 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.FromJSON.FromJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.FromJSON.FromJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.FromJSON.FromJSON a3, GHC.TypeLits.KnownSymbol f4, Data.Aeson.Types.FromJSON.FromJSON a4, GHC.TypeLits.KnownSymbol f5, Data.Aeson.Types.FromJSON.FromJSON a5, GHC.TypeLits.KnownSymbol f6, Data.Aeson.Types.FromJSON.FromJSON a6) => Data.Aeson.Types.FromJSON.FromJSON (DomainDriven.Internal.NamedFields.NF6 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.OpenApi.Internal.Schema.ToSchema a1, GHC.TypeLits.KnownSymbol f2, Data.OpenApi.Internal.Schema.ToSchema a2, GHC.TypeLits.KnownSymbol f3, Data.OpenApi.Internal.Schema.ToSchema a3, GHC.TypeLits.KnownSymbol f4, Data.OpenApi.Internal.Schema.ToSchema a4, GHC.TypeLits.KnownSymbol f5, Data.OpenApi.Internal.Schema.ToSchema a5, GHC.TypeLits.KnownSymbol f6, Data.OpenApi.Internal.Schema.ToSchema a6) => Data.OpenApi.Internal.Schema.ToSchema (DomainDriven.Internal.NamedFields.NF6 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5 f6 a6) instance (GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.ToJSON.ToJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.ToJSON.ToJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.ToJSON.ToJSON a3, GHC.TypeLits.KnownSymbol f4, Data.Aeson.Types.ToJSON.ToJSON a4, GHC.TypeLits.KnownSymbol f5, Data.Aeson.Types.ToJSON.ToJSON a5) => Data.Aeson.Types.ToJSON.ToJSON (DomainDriven.Internal.NamedFields.NF5 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.FromJSON.FromJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.FromJSON.FromJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.FromJSON.FromJSON a3, GHC.TypeLits.KnownSymbol f4, Data.Aeson.Types.FromJSON.FromJSON a4, GHC.TypeLits.KnownSymbol f5, Data.Aeson.Types.FromJSON.FromJSON a5) => Data.Aeson.Types.FromJSON.FromJSON (DomainDriven.Internal.NamedFields.NF5 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.OpenApi.Internal.Schema.ToSchema a1, GHC.TypeLits.KnownSymbol f2, Data.OpenApi.Internal.Schema.ToSchema a2, GHC.TypeLits.KnownSymbol f3, Data.OpenApi.Internal.Schema.ToSchema a3, GHC.TypeLits.KnownSymbol f4, Data.OpenApi.Internal.Schema.ToSchema a4, GHC.TypeLits.KnownSymbol f5, Data.OpenApi.Internal.Schema.ToSchema a5) => Data.OpenApi.Internal.Schema.ToSchema (DomainDriven.Internal.NamedFields.NF5 name f1 a1 f2 a2 f3 a3 f4 a4 f5 a5) instance (GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.ToJSON.ToJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.ToJSON.ToJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.ToJSON.ToJSON a3, GHC.TypeLits.KnownSymbol f4, Data.Aeson.Types.ToJSON.ToJSON a4) => Data.Aeson.Types.ToJSON.ToJSON (DomainDriven.Internal.NamedFields.NF4 name f1 a1 f2 a2 f3 a3 f4 a4) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.FromJSON.FromJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.FromJSON.FromJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.FromJSON.FromJSON a3, GHC.TypeLits.KnownSymbol f4, Data.Aeson.Types.FromJSON.FromJSON a4) => Data.Aeson.Types.FromJSON.FromJSON (DomainDriven.Internal.NamedFields.NF4 name f1 a1 f2 a2 f3 a3 f4 a4) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.OpenApi.Internal.Schema.ToSchema a1, GHC.TypeLits.KnownSymbol f2, Data.OpenApi.Internal.Schema.ToSchema a2, GHC.TypeLits.KnownSymbol f3, Data.OpenApi.Internal.Schema.ToSchema a3, GHC.TypeLits.KnownSymbol f4, Data.OpenApi.Internal.Schema.ToSchema a4) => Data.OpenApi.Internal.Schema.ToSchema (DomainDriven.Internal.NamedFields.NF4 name f1 a1 f2 a2 f3 a3 f4 a4) instance (GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.ToJSON.ToJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.ToJSON.ToJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.ToJSON.ToJSON a3) => Data.Aeson.Types.ToJSON.ToJSON (DomainDriven.Internal.NamedFields.NF3 name f1 a1 f2 a2 f3 a3) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.FromJSON.FromJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.FromJSON.FromJSON a2, GHC.TypeLits.KnownSymbol f3, Data.Aeson.Types.FromJSON.FromJSON a3) => Data.Aeson.Types.FromJSON.FromJSON (DomainDriven.Internal.NamedFields.NF3 name f1 a1 f2 a2 f3 a3) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.OpenApi.Internal.Schema.ToSchema a1, GHC.TypeLits.KnownSymbol f2, Data.OpenApi.Internal.Schema.ToSchema a2, GHC.TypeLits.KnownSymbol f3, Data.OpenApi.Internal.Schema.ToSchema a3) => Data.OpenApi.Internal.Schema.ToSchema (DomainDriven.Internal.NamedFields.NF3 name f1 a1 f2 a2 f3 a3) instance (GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.ToJSON.ToJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.ToJSON.ToJSON a2) => Data.Aeson.Types.ToJSON.ToJSON (DomainDriven.Internal.NamedFields.NF2 name f1 a1 f2 a2) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.FromJSON.FromJSON a1, GHC.TypeLits.KnownSymbol f2, Data.Aeson.Types.FromJSON.FromJSON a2) => Data.Aeson.Types.FromJSON.FromJSON (DomainDriven.Internal.NamedFields.NF2 name f1 a1 f2 a2) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.OpenApi.Internal.Schema.ToSchema a1, GHC.TypeLits.KnownSymbol f2, Data.OpenApi.Internal.Schema.ToSchema a2) => Data.OpenApi.Internal.Schema.ToSchema (DomainDriven.Internal.NamedFields.NF2 name f1 a1 f2 a2) instance (GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.ToJSON.ToJSON a1) => Data.Aeson.Types.ToJSON.ToJSON (DomainDriven.Internal.NamedFields.NF1 name f1 a1) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.Aeson.Types.FromJSON.FromJSON a1) => Data.Aeson.Types.FromJSON.FromJSON (DomainDriven.Internal.NamedFields.NF1 name f1 a1) instance (GHC.TypeLits.KnownSymbol name, GHC.TypeLits.KnownSymbol f1, Data.OpenApi.Internal.Schema.ToSchema a1) => Data.OpenApi.Internal.Schema.ToSchema (DomainDriven.Internal.NamedFields.NF1 name f1 a1) module DomainDriven.Internal.Text lowerFirst :: String -> String lowerFirstT :: Text -> Text upperFirst :: String -> String upperFirstT :: Text -> Text camelAppend :: String -> String -> String camelAppendT :: Text -> Text -> Text module DomainDriven.Internal.HasFieldName class HasFieldName t fieldName :: HasFieldName t => Text fieldName :: (HasFieldName t, Generic t, GHasFieldName (Rep t)) => Text class GHasFieldName t gfieldName :: GHasFieldName t => t x -> Text instance DomainDriven.Internal.HasFieldName.HasFieldName GHC.Types.Int instance DomainDriven.Internal.HasFieldName.HasFieldName GHC.Types.Double instance DomainDriven.Internal.HasFieldName.HasFieldName Data.Text.Internal.Text instance DomainDriven.Internal.HasFieldName.HasFieldName GHC.Types.Bool instance DomainDriven.Internal.HasFieldName.HasFieldName Data.Time.Calendar.Days.Day instance DomainDriven.Internal.HasFieldName.HasFieldName Data.Time.Clock.Internal.UTCTime.UTCTime instance DomainDriven.Internal.HasFieldName.HasFieldName v => DomainDriven.Internal.HasFieldName.HasFieldName (Data.Map.Internal.Map k v) instance DomainDriven.Internal.HasFieldName.HasFieldName v => DomainDriven.Internal.HasFieldName.HasFieldName (Data.HashMap.Internal.HashMap k v) instance DomainDriven.Internal.HasFieldName.HasFieldName v => DomainDriven.Internal.HasFieldName.HasFieldName (Data.Set.Internal.Set v) instance DomainDriven.Internal.HasFieldName.HasFieldName v => DomainDriven.Internal.HasFieldName.HasFieldName [v] instance DomainDriven.Internal.HasFieldName.HasFieldName GHC.Base.String instance DomainDriven.Internal.HasFieldName.HasFieldName v => DomainDriven.Internal.HasFieldName.HasFieldName (Data.Vector.Vector v) instance DomainDriven.Internal.HasFieldName.HasFieldName v => DomainDriven.Internal.HasFieldName.HasFieldName (GHC.Maybe.Maybe v) instance forall k (c :: GHC.Generics.Meta) i (f :: k -> *). GHC.Generics.Datatype c => DomainDriven.Internal.HasFieldName.GHasFieldName (GHC.Generics.M1 i c f) module DomainDriven.Internal.NamedJsonFields packed :: Getting r String Text newtype NamedJsonFields a NamedJsonFields :: a -> NamedJsonFields a gNamedToJson :: (GNamedToJSON (Rep a), Generic a) => NamedJsonOptions -> a -> Value gNamedParseJson :: (GNamedFromJSON (Rep a), Generic a) => NamedJsonOptions -> Value -> Parser a gNamedDeclareNamedSchema :: forall a. GNamedToSchema (Rep a) => NamedJsonOptions -> Proxy a -> Declare (Definitions Schema) NamedSchema data NamedJsonOptions NamedJsonOptions :: (String -> String) -> String -> Bool -> (String -> String) -> NamedJsonOptions [$sel:constructorTagModifier:NamedJsonOptions] :: NamedJsonOptions -> String -> String [$sel:tagFieldName:NamedJsonOptions] :: NamedJsonOptions -> String [$sel:skipTagField:NamedJsonOptions] :: NamedJsonOptions -> Bool [$sel:datatypeNameModifier:NamedJsonOptions] :: NamedJsonOptions -> String -> String defaultNamedJsonOptions :: NamedJsonOptions data Proxy3 a b c Proxy3 :: Proxy3 a b c class GNamedToSchema (f :: Type -> Type) gDeclareNamedSchema :: GNamedToSchema f => NamedJsonOptions -> Proxy f -> StateT [UsedName] (Declare (Definitions Schema)) NamedSchema type UsedName = Key class GNamedToJSON a gToTupleList :: GNamedToJSON a => NamedJsonOptions -> a x -> State [UsedName] [(Key, Value)] actualFieldName :: [UsedName] -> Key -> Key lookupKey :: Key -> Value -> StateT [UsedName] Parser Value class GNamedFromJSON a gNamedFromJSON :: GNamedFromJSON a => NamedJsonOptions -> Value -> StateT [UsedName] Parser (a x) instance GHC.Generics.Generic DomainDriven.Internal.NamedJsonFields.NamedJsonOptions instance (DomainDriven.Internal.NamedJsonFields.GNamedFromJSON (GHC.Generics.Rep a), GHC.Generics.Generic a) => Data.Aeson.Types.FromJSON.FromJSON (DomainDriven.Internal.NamedJsonFields.NamedJsonFields a) instance forall k (p :: k -> *) (f :: GHC.Generics.Meta). DomainDriven.Internal.NamedJsonFields.GNamedFromJSON p => DomainDriven.Internal.NamedJsonFields.GNamedFromJSON (GHC.Generics.M1 GHC.Generics.D f p) instance forall k (f :: GHC.Generics.Meta) (p :: k -> *). (GHC.Generics.Constructor f, DomainDriven.Internal.NamedJsonFields.GNamedFromJSON p) => DomainDriven.Internal.NamedJsonFields.GNamedFromJSON (GHC.Generics.M1 GHC.Generics.C f p) instance DomainDriven.Internal.NamedJsonFields.GNamedFromJSON GHC.Generics.U1 instance forall k (a :: k -> *) (b :: k -> *). (DomainDriven.Internal.NamedJsonFields.GNamedFromJSON a, DomainDriven.Internal.NamedJsonFields.GNamedFromJSON b) => DomainDriven.Internal.NamedJsonFields.GNamedFromJSON (a GHC.Generics.:+: b) instance forall k (a :: k -> *) (b :: k -> *). (DomainDriven.Internal.NamedJsonFields.GNamedFromJSON a, DomainDriven.Internal.NamedJsonFields.GNamedFromJSON b) => DomainDriven.Internal.NamedJsonFields.GNamedFromJSON (a GHC.Generics.:*: b) instance (Data.Aeson.Types.FromJSON.FromJSON t, DomainDriven.Internal.HasFieldName.HasFieldName t) => DomainDriven.Internal.NamedJsonFields.GNamedFromJSON (GHC.Generics.M1 GHC.Generics.S c (GHC.Generics.Rec0 t)) instance (DomainDriven.Internal.NamedJsonFields.GNamedToJSON (GHC.Generics.Rep a), GHC.Generics.Generic a) => Data.Aeson.Types.ToJSON.ToJSON (DomainDriven.Internal.NamedJsonFields.NamedJsonFields a) instance forall k (f :: k -> *) (d :: GHC.Generics.Meta). DomainDriven.Internal.NamedJsonFields.GNamedToJSON f => DomainDriven.Internal.NamedJsonFields.GNamedToJSON (GHC.Generics.M1 GHC.Generics.D d f) instance forall k (f :: k -> *) (c :: GHC.Generics.Meta). (DomainDriven.Internal.NamedJsonFields.GNamedToJSON f, GHC.Generics.Constructor c) => DomainDriven.Internal.NamedJsonFields.GNamedToJSON (GHC.Generics.M1 GHC.Generics.C c f) instance (Data.Aeson.Types.ToJSON.ToJSON t, DomainDriven.Internal.HasFieldName.HasFieldName t) => DomainDriven.Internal.NamedJsonFields.GNamedToJSON (GHC.Generics.M1 GHC.Generics.S c (GHC.Generics.Rec0 t)) instance DomainDriven.Internal.NamedJsonFields.GNamedToJSON GHC.Generics.U1 instance forall k (a :: k -> *) (b :: k -> *). (DomainDriven.Internal.NamedJsonFields.GNamedToJSON a, DomainDriven.Internal.NamedJsonFields.GNamedToJSON b) => DomainDriven.Internal.NamedJsonFields.GNamedToJSON (a GHC.Generics.:*: b) instance forall k (a :: k -> *) (b :: k -> *). (DomainDriven.Internal.NamedJsonFields.GNamedToJSON a, DomainDriven.Internal.NamedJsonFields.GNamedToJSON b) => DomainDriven.Internal.NamedJsonFields.GNamedToJSON (a GHC.Generics.:+: b) instance (Data.Typeable.Internal.Typeable a, DomainDriven.Internal.NamedJsonFields.GNamedToSchema (GHC.Generics.Rep a)) => Data.OpenApi.Internal.Schema.ToSchema (DomainDriven.Internal.NamedJsonFields.NamedJsonFields a) instance (GHC.Generics.Datatype d, DomainDriven.Internal.NamedJsonFields.GNamedToSchema f) => DomainDriven.Internal.NamedJsonFields.GNamedToSchema (GHC.Generics.D1 d f) instance (DomainDriven.Internal.NamedJsonFields.GNamedToSchema f, GHC.Generics.Constructor c) => DomainDriven.Internal.NamedJsonFields.GNamedToSchema (GHC.Generics.C1 c f) instance (Data.OpenApi.Internal.Schema.ToSchema f, DomainDriven.Internal.HasFieldName.HasFieldName f) => DomainDriven.Internal.NamedJsonFields.GNamedToSchema (GHC.Generics.S1 s (GHC.Generics.Rec0 (GHC.Maybe.Maybe f))) instance (Data.OpenApi.Internal.Schema.ToSchema f, DomainDriven.Internal.HasFieldName.HasFieldName f) => DomainDriven.Internal.NamedJsonFields.GNamedToSchema (GHC.Generics.S1 s (GHC.Generics.Rec0 f)) instance DomainDriven.Internal.NamedJsonFields.GNamedToSchema GHC.Generics.U1 instance (DomainDriven.Internal.NamedJsonFields.GNamedToSchema f, DomainDriven.Internal.NamedJsonFields.GNamedToSchema g) => DomainDriven.Internal.NamedJsonFields.GNamedToSchema (f GHC.Generics.:*: g) instance (DomainDriven.Internal.NamedJsonFields.GNamedToSchema f, DomainDriven.Internal.NamedJsonFields.GNamedToSchema g) => DomainDriven.Internal.NamedJsonFields.GNamedToSchema (f GHC.Generics.:+: g) module DomainDriven.Server.Class data RequestType (accessType :: ModelAccess) (contentTypes :: [Type]) (verb :: Type -> Type) data ModelAccess Direct :: ModelAccess Callback :: ModelAccess type Cmd = RequestType 'Direct '[JSON] (Verb 'POST 200 '[JSON]) type CbCmd = RequestType 'Callback '[JSON] (Verb 'POST 200 '[JSON]) type Query = RequestType 'Direct '[JSON] (Verb 'GET 200 '[JSON]) type CbQuery = RequestType 'Callback '[JSON] (Verb 'GET 200 '[JSON]) -- | The kind of an Action, defined with a GADT as: data MyAction :: Action -- where ThisAction :: P x "count" Int -> MyAction x 'Cmd Int -- ThatAction :: P x "description" Text -> MyAction x 'Cmd () type Action = ParamPart -> Type -> Type -> Type type family CanMutate method :: Bool -- | Used as a parameter to the P type family on order to determine -- the focus. data ParamPart ParamName :: ParamPart ParamType :: ParamPart -- | P is used for specifying the parameters of the model. The name will be -- used as the name in the JSON encoding or the query parameter of the -- generated server. type family P (x :: ParamPart) (name :: Symbol) (a :: Type) type family GetModelAccess method :: ModelAccess data HandlerType method model event m a [Query] :: (CanMutate method ~ 'False, GetModelAccess method ~ 'Direct) => (model -> m a) -> HandlerType method model event m a [CbQuery] :: (CanMutate method ~ 'False, GetModelAccess method ~ 'Callback) => (m model -> m a) -> HandlerType method model event m a [Cmd] :: (CanMutate method ~ 'True, GetModelAccess method ~ 'Direct) => (model -> m (model -> a, [event])) -> HandlerType method model event m a [CbCmd] :: (CanMutate method ~ 'True, GetModelAccess method ~ 'Callback) => ((forall x. (model -> m (model -> x, [event])) -> m x) -> m a) -> HandlerType method model event m a type CmdCallback model event (m :: Type -> Type) = (forall a. model -> m (a, [event])) mapModel :: forall m event model0 model1 method a. Monad m => (model0 -> model1) -> HandlerType method model1 event m a -> HandlerType method model0 event m a mapEvent :: forall m e0 e1 a method model. Monad m => (e0 -> e1) -> HandlerType method model e0 m a -> HandlerType method model e1 m a mapResult :: Monad m => (r0 -> r1) -> HandlerType method model e m r0 -> HandlerType method model e m r1 -- | Action handler -- -- Expects a command, specified using a one-parameter GADT where the -- parameter specifies the return type. -- -- When implementing the handler you have access to IO, but in order for -- the library to ensure thread safety of state updates you do not have -- direct access to the current state. Instead the handler returns a -- continuation, telling the library how to perform the evaluations on -- the model. -- -- The resulting events will be applied to the current state so that no -- other command can run and generate events on the same state. type ActionHandler model event m c = forall method a. c 'ParamType method a -> HandlerType method model event m a type ActionRunner m c = forall method a. MonadUnliftIO m => c 'ParamType method a -> m a runAction :: (MonadUnliftIO m, WriteModel p, model ~ Model p, event ~ Event p) => p -> ActionHandler model event m cmd -> cmd 'ParamType method ret -> m ret instance GHC.Show.Show DomainDriven.Server.Class.ParamPart module DomainDriven.Server.Types data ApiSpec ApiSpec :: GadtName -> GadtType -> VarBindings -> [ApiPiece] -> ApiOptions -> ApiSpec [$sel:gadtName:ApiSpec] :: ApiSpec -> GadtName -- | Name of the GADT representing the command [$sel:gadtType:ApiSpec] :: ApiSpec -> GadtType [$sel:allVarBindings:ApiSpec] :: ApiSpec -> VarBindings -- | Endpoints created from the constructors of the GADT [$sel:endpoints:ApiSpec] :: ApiSpec -> [ApiPiece] -- | The setting to use when generating part of the API [$sel:options:ApiSpec] :: ApiSpec -> ApiOptions data VarBindings VarBindings :: Name -> Name -> Name -> [TyVarBndr ()] -> VarBindings [$sel:paramPart:VarBindings] :: VarBindings -> Name [$sel:method:VarBindings] :: VarBindings -> Name [$sel:return:VarBindings] :: VarBindings -> Name [$sel:extra:VarBindings] :: VarBindings -> [TyVarBndr ()] data ApiOptions ApiOptions :: (String -> String) -> String -> Maybe String -> ApiOptions [$sel:renameConstructor:ApiOptions] :: ApiOptions -> String -> String [$sel:typenameSeparator:ApiOptions] :: ApiOptions -> String [$sel:bodyNameBase:ApiOptions] :: ApiOptions -> Maybe String defaultApiOptions :: ApiOptions data Mutability Mutable :: Mutability Immutable :: Mutability data ApiPiece Endpoint :: ConstructorName -> ConstructorArgs -> VarBindings -> HandlerSettings -> Mutability -> EpReturnType -> ApiPiece SubApi :: ConstructorName -> ConstructorArgs -> ApiSpec -> ApiPiece data HandlerSettings HandlerSettings :: Type -> Type -> HandlerSettings [$sel:contentTypes:HandlerSettings] :: HandlerSettings -> Type [$sel:verb:HandlerSettings] :: HandlerSettings -> Type newtype ConstructorName ConstructorName :: Name -> ConstructorName newtype EpReturnType EpReturnType :: Type -> EpReturnType newtype GadtName GadtName :: Name -> GadtName newtype GadtType GadtType :: Type -> GadtType newtype UrlSegment UrlSegment :: String -> UrlSegment newtype ConstructorArgs ConstructorArgs :: [(String, Type)] -> ConstructorArgs newtype Runner Runner :: Type -> Runner -- | Carries information regarding how the API looks at the place we're -- currently at. data ServerInfo ServerInfo :: GadtName -> GadtName -> [ConstructorName] -> [UrlSegment] -> ApiOptions -> ServerInfo -- | Use as a prefix of all types [$sel:baseGadt:ServerInfo] :: ServerInfo -> GadtName [$sel:currentGadt:ServerInfo] :: ServerInfo -> GadtName -- | To create good names without conflict [$sel:parentConstructors:ServerInfo] :: ServerInfo -> [ConstructorName] -- | Used to give a good name to the request body [$sel:prefixSegments:ServerInfo] :: ServerInfo -> [UrlSegment] -- | The current options [$sel:options:ServerInfo] :: ServerInfo -> ApiOptions data ServerGenState ServerGenState :: ServerInfo -> Set String -> ServerGenState [$sel:info:ServerGenState] :: ServerGenState -> ServerInfo [$sel:usedParamNames:ServerGenState] :: ServerGenState -> Set String newtype ServerGenM a ServerGenM :: StateT ServerGenState Q a -> ServerGenM a [$sel:unServerGenM:ServerGenM] :: ServerGenM a -> StateT ServerGenState Q a data Pmatch Pmatch :: Name -> String -> Type -> Pmatch [$sel:paramPart:Pmatch] :: Pmatch -> Name [$sel:paramName:Pmatch] :: Pmatch -> String [$sel:paramType:Pmatch] :: Pmatch -> Type data ConstructorMatch ConstructorMatch :: Name -> Name -> [Pmatch] -> FinalConstructorTypeMatch -> ConstructorMatch -- | Of kind ParamPart [$sel:xParam:ConstructorMatch] :: ConstructorMatch -> Name [$sel:constructorName:ConstructorMatch] :: ConstructorMatch -> Name [$sel:parameters:ConstructorMatch] :: ConstructorMatch -> [Pmatch] [$sel:finalType:ConstructorMatch] :: ConstructorMatch -> FinalConstructorTypeMatch data SubActionMatch SubActionMatch :: Name -> [Pmatch] -> Name -> Type -> SubActionMatch [$sel:constructorName:SubActionMatch] :: SubActionMatch -> Name [$sel:parameters:SubActionMatch] :: SubActionMatch -> [Pmatch] [$sel:subActionName:SubActionMatch] :: SubActionMatch -> Name [$sel:subActionType:SubActionMatch] :: SubActionMatch -> Type data SubActionTypeMatch SubActionTypeMatch :: SubActionTypeMatch data FinalConstructorTypeMatch FinalConstructorTypeMatch :: RequestTypeMatch -> Type -> FinalConstructorTypeMatch [$sel:requestType:FinalConstructorTypeMatch] :: FinalConstructorTypeMatch -> RequestTypeMatch [$sel:returnType:FinalConstructorTypeMatch] :: FinalConstructorTypeMatch -> Type data RequestTypeMatch RequestTypeMatch :: Type -> Type -> Type -> RequestTypeMatch [$sel:accessType:RequestTypeMatch] :: RequestTypeMatch -> Type [$sel:contentTypes:RequestTypeMatch] :: RequestTypeMatch -> Type [$sel:verb:RequestTypeMatch] :: RequestTypeMatch -> Type instance GHC.Classes.Eq DomainDriven.Server.Types.VarBindings instance GHC.Generics.Generic DomainDriven.Server.Types.VarBindings instance GHC.Show.Show DomainDriven.Server.Types.VarBindings instance GHC.Generics.Generic DomainDriven.Server.Types.ApiOptions instance GHC.Classes.Eq DomainDriven.Server.Types.Mutability instance GHC.Show.Show DomainDriven.Server.Types.Mutability instance GHC.Classes.Eq DomainDriven.Server.Types.HandlerSettings instance GHC.Generics.Generic DomainDriven.Server.Types.HandlerSettings instance GHC.Show.Show DomainDriven.Server.Types.HandlerSettings instance GHC.Classes.Eq DomainDriven.Server.Types.ConstructorName instance GHC.Generics.Generic DomainDriven.Server.Types.ConstructorName instance GHC.Show.Show DomainDriven.Server.Types.ConstructorName instance GHC.Classes.Eq DomainDriven.Server.Types.EpReturnType instance GHC.Generics.Generic DomainDriven.Server.Types.EpReturnType instance GHC.Show.Show DomainDriven.Server.Types.EpReturnType instance GHC.Classes.Eq DomainDriven.Server.Types.GadtName instance GHC.Generics.Generic DomainDriven.Server.Types.GadtName instance GHC.Show.Show DomainDriven.Server.Types.GadtName instance GHC.Classes.Eq DomainDriven.Server.Types.GadtType instance GHC.Generics.Generic DomainDriven.Server.Types.GadtType instance GHC.Show.Show DomainDriven.Server.Types.GadtType instance GHC.Classes.Eq DomainDriven.Server.Types.UrlSegment instance GHC.Generics.Generic DomainDriven.Server.Types.UrlSegment instance GHC.Show.Show DomainDriven.Server.Types.UrlSegment instance GHC.Classes.Eq DomainDriven.Server.Types.ConstructorArgs instance GHC.Generics.Generic DomainDriven.Server.Types.ConstructorArgs instance GHC.Show.Show DomainDriven.Server.Types.ConstructorArgs instance GHC.Generics.Generic DomainDriven.Server.Types.ApiSpec instance GHC.Show.Show DomainDriven.Server.Types.ApiSpec instance GHC.Generics.Generic DomainDriven.Server.Types.ApiPiece instance GHC.Show.Show DomainDriven.Server.Types.ApiPiece instance GHC.Classes.Eq DomainDriven.Server.Types.Runner instance GHC.Generics.Generic DomainDriven.Server.Types.Runner instance GHC.Show.Show DomainDriven.Server.Types.Runner instance GHC.Generics.Generic DomainDriven.Server.Types.ServerInfo instance GHC.Show.Show DomainDriven.Server.Types.ServerInfo instance GHC.Generics.Generic DomainDriven.Server.Types.ServerGenState instance GHC.Show.Show DomainDriven.Server.Types.ServerGenState instance Control.Monad.Fail.MonadFail DomainDriven.Server.Types.ServerGenM instance Control.Monad.State.Class.MonadState DomainDriven.Server.Types.ServerGenState DomainDriven.Server.Types.ServerGenM instance GHC.Base.Monad DomainDriven.Server.Types.ServerGenM instance GHC.Base.Applicative DomainDriven.Server.Types.ServerGenM instance GHC.Base.Functor DomainDriven.Server.Types.ServerGenM instance GHC.Generics.Generic DomainDriven.Server.Types.Pmatch instance GHC.Show.Show DomainDriven.Server.Types.Pmatch instance GHC.Generics.Generic DomainDriven.Server.Types.SubActionMatch instance GHC.Show.Show DomainDriven.Server.Types.SubActionMatch instance GHC.Generics.Generic DomainDriven.Server.Types.SubActionTypeMatch instance GHC.Show.Show DomainDriven.Server.Types.SubActionTypeMatch instance GHC.Generics.Generic DomainDriven.Server.Types.RequestTypeMatch instance GHC.Show.Show DomainDriven.Server.Types.RequestTypeMatch instance GHC.Generics.Generic DomainDriven.Server.Types.FinalConstructorTypeMatch instance GHC.Show.Show DomainDriven.Server.Types.FinalConstructorTypeMatch instance GHC.Generics.Generic DomainDriven.Server.Types.ConstructorMatch instance GHC.Show.Show DomainDriven.Server.Types.ConstructorMatch instance GHC.Show.Show DomainDriven.Server.Types.ApiOptions module DomainDriven.Server.Helpers runServerGenM :: ServerGenState -> ServerGenM a -> Q a liftQ :: Q a -> ServerGenM a withLocalState :: (ServerGenState -> ServerGenState) -> ServerGenM a -> ServerGenM a mkUrlSegment :: ConstructorName -> ServerGenM UrlSegment unqualifiedString :: Lens' Name String askTypeName :: ServerGenM Name askApiTypeName :: ServerGenM Name askEndpointTypeName :: ServerGenM Name askServerName :: ServerGenM Name askHandlerName :: ServerGenM Name askBodyTag :: ConstructorName -> ServerGenM TyLit enterApi :: ApiSpec -> ServerGenM a -> ServerGenM a enterApiPiece :: ApiPiece -> ServerGenM a -> ServerGenM a hasJsonContentType :: HandlerSettings -> Bool module DomainDriven.Server.Config class HasApiOptions (action :: Action) apiOptions :: HasApiOptions action => ApiOptions -- | Configuration used to generate server This is expected to be generated -- by mkServerConfig. It is only explicit due to the GHC stage -- restrictions. data ServerConfig ServerConfig :: Map String ApiOptions -> ServerConfig -- | Map of API options for all action GADTs used in the API [$sel:allApiOptions:ServerConfig] :: ServerConfig -> Map String ApiOptions defaultServerConfig :: ServerConfig -- | Generate a server configuration and give it the specified name mkServerConfig :: String -> Q [Dec] -- | Generates `Map String ApiOptions` Containing the ApiOptions of all -- types with an ApiOpts instance getApiOptionsMap :: Q Exp dropPrefix :: String -> String -> String dropSuffix :: String -> String -> String dropFirstWord :: String -> String -- | An abstract type representing names in the syntax tree. -- -- Names can be constructed in several ways, which come with -- different name-capture guarantees (see -- Language.Haskell.TH.Syntax#namecapture for an explanation of -- name capture): -- -- -- -- Names constructed using newName and mkName may be -- used in bindings (such as let x = ... or x -> -- ...), but names constructed using lookupValueName, -- lookupTypeName, 'f, ''T may not. data Name instance GHC.Generics.Generic DomainDriven.Server.Config.ServerConfig instance GHC.Show.Show DomainDriven.Server.Config.ServerConfig module DomainDriven.Server.TH mkServer :: ServerConfig -> Name -> Q [Dec] getApiOptions :: ServerConfig -> GadtName -> Q ApiOptions getActionDec :: GadtName -> Q (Dec, VarBindings) getSubActionDec :: VarBindings -> SubActionMatch -> Q (Dec, VarBindings) replaceVarT :: Map Name Name -> Type -> Either String Type guardMethodVar :: TyVarBndr flag -> Q () getMutabilityOf :: Type -> Q Mutability guardReturnVar :: Show flag => TyVarBndr flag -> Q () getConstructors :: Dec -> Q [Con] toTyVarBndr :: VarBindings -> [TyVarBndr ()] mkVarBindings :: Show flag => [TyVarBndr flag] -> Either String VarBindings matchNormalConstructor :: Con -> Either String ConstructorMatch matchSubActionConstructor :: Con -> Either String SubActionMatch matchFinalConstructorType :: Type -> Either String FinalConstructorTypeMatch matchRequestType :: Type -> Either String RequestTypeMatch -- | Tries to match a Type to a more easily readable Pmatch. Successful -- match means the type is representing the type family P matchP :: Type -> Either String Pmatch mkApiPiece :: ServerConfig -> VarBindings -> Con -> Q ApiPiece -- | Create a ApiSpec from a GADT The GADT must have one parameter -- representing the return type mkServerSpec :: ServerConfig -> GadtName -> Q ApiSpec gadtToAction :: GadtType -> Either String Type mkSubServerSpec :: ServerConfig -> VarBindings -> SubActionMatch -> Q ApiSpec -- | Name and type variables used by API askApiNameAndParams :: ApiSpec -> ServerGenM (Name, [TyVarBndr ()]) apiPieceTyVars :: ApiPiece -> [TyVarBndr ()] apiSpecTyVars :: ApiSpec -> [TyVarBndr ()] mkApiTypeDecs :: ApiSpec -> ServerGenM [Dec] applyTyVars :: Type -> [TyVarBndr ()] -> Type -- | Create endpoint types to be referenced in the API * For Endpoint this -- is just a reference to the handler type * For SubApi we apply the path -- parameters before referencing the SubApi mkEndpointApiType :: ApiPiece -> ServerGenM (Type, [TyVarBndr ()]) -- | Defines the servant types for the endpoints For SubApi it will trigger -- the full creating of the sub server with types and all -- -- Result will be something like: ``` type Customer_CreateEndpoint = -- Create :> ReqBody '[JSON] (NamedField1 -- Customer_Create Name Email) :> Post '[JSON] CustomerKey mkHandlerTypeDec :: ApiPiece -> ServerGenM [Dec] guardUniqueParamName :: String -> ServerGenM () mkQueryParams :: ConstructorArgs -> ServerGenM [QueryParamType] type QueryParamType = Type updateConstructorTypes :: (Type -> Type) -> Con -> Con mkVerb :: HandlerSettings -> Type -> Type -- | Declare then handlers for the API mkServerDec :: ApiSpec -> ServerGenM [Dec] -- | Get the subset of type varaibes used ty a type, in the roder they're -- applied Used to avoid rendundant type variables in the forall -- statement of sub-servers getUsedTyVars :: forall flag. [TyVarBndr flag] -> Type -> [TyVarBndr flag] -- | Get the type variables (VarT) used in a type, returned in the order -- they're referenced getUsedTyVarNames :: Type -> [Name] withForall :: [TyVarBndr ()] -> Type -> Type actionRunner :: Type -> Type runnerMonadName :: Name mkNamedFieldsType :: ConstructorName -> ConstructorArgs -> ServerGenM (Maybe Type) mkQueryHandlerSignature :: GadtType -> ConstructorArgs -> EpReturnType -> Type -- | Makes command handler, e.g. counterCmd_AddToCounterHandler :: -- ActionRunner m CounterCmd -> NamedFields1 -- CounterCmd_AddToCounter Int -> m Int mkCmdHandlerSignature :: GadtType -> ConstructorName -> ConstructorArgs -> EpReturnType -> ServerGenM Type mkFunction :: [Type] -> Type sortAndExcludeBindings :: [TyVarBndr Specificity] -> Type -> Either String [TyVarBndr Specificity] varNameOrder :: Type -> Either String [Name] gadtTypeParams :: GadtType -> Either String [TyVarBndr ()] -- | Define the servant handler for an enpoint or referens the subapi with -- path parameters applied mkApiPieceHandler :: GadtType -> ApiPiece -> ServerGenM [Dec] mkServerFromSpec :: ApiSpec -> ServerGenM [Dec] -- | Handles the special case of () being transformed into -- NoContent mkReturnType :: EpReturnType -> Type prependServerEndpointName :: UrlSegment -> Type -> Q Type mkReqBody :: HandlerSettings -> ConstructorName -> ConstructorArgs -> ServerGenM (Maybe Type) module DomainDriven mkId :: MonadIO m => m UUID type family Event p type family Model p class ReadModel p where { type family Model p; type family Event p; } applyEvent :: ReadModel p => p -> Model p -> Stored (Event p) -> Model p getModel :: ReadModel p => p -> IO (Model p) getEventList :: ReadModel p => p -> IO [Stored (Event p)] getEventStream :: ReadModel p => p -> SerialT IO (Stored (Event p)) class ReadModel p => WriteModel p transactionalUpdate :: (WriteModel p, MonadUnliftIO m) => p -> (Model p -> m (Model p -> a, [Event p])) -> m a -- | Wrapper for stored data This ensures all events have a unique ID and a -- timestamp, without having to deal with that when implementing the -- model. data Stored a Stored :: a -> UTCTime -> UUID -> Stored a [$sel:storedEvent:Stored] :: Stored a -> a [$sel:storedTimestamp:Stored] :: Stored a -> UTCTime [$sel:storedUUID:Stored] :: Stored a -> UUID -- | Type representing Universally Unique Identifiers (UUID) as -- specified in RFC 4122. data UUID data NF9 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 (f8 :: Symbol) a8 (f9 :: Symbol) a9 NF9 :: a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> a9 -> NF9 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 (f8 :: Symbol) a8 (f9 :: Symbol) a9 data NF8 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 (f8 :: Symbol) a8 NF8 :: a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> a8 -> NF8 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 (f8 :: Symbol) a8 data NF7 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 NF7 :: a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> a7 -> NF7 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 (f7 :: Symbol) a7 data NF6 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 NF6 :: a1 -> a2 -> a3 -> a4 -> a5 -> a6 -> NF6 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 (f6 :: Symbol) a6 data NF5 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 NF5 :: a1 -> a2 -> a3 -> a4 -> a5 -> NF5 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 (f5 :: Symbol) a5 data NF4 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 NF4 :: a1 -> a2 -> a3 -> a4 -> NF4 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 (f4 :: Symbol) a4 data NF3 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 NF3 :: a1 -> a2 -> a3 -> NF3 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 (f3 :: Symbol) a3 data NF2 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 NF2 :: a1 -> a2 -> NF2 (name :: Symbol) (f1 :: Symbol) a1 (f2 :: Symbol) a2 data NF1 (name :: Symbol) (f1 :: Symbol) ty NF1 :: ty -> NF1 (name :: Symbol) (f1 :: Symbol) ty type ActionRunner m c = forall method a. MonadUnliftIO m => c 'ParamType method a -> m a -- | Action handler -- -- Expects a command, specified using a one-parameter GADT where the -- parameter specifies the return type. -- -- When implementing the handler you have access to IO, but in order for -- the library to ensure thread safety of state updates you do not have -- direct access to the current state. Instead the handler returns a -- continuation, telling the library how to perform the evaluations on -- the model. -- -- The resulting events will be applied to the current state so that no -- other command can run and generate events on the same state. type ActionHandler model event m c = forall method a. c 'ParamType method a -> HandlerType method model event m a data HandlerType method model event m a [Query] :: (CanMutate method ~ 'False, GetModelAccess method ~ 'Direct) => (model -> m a) -> HandlerType method model event m a [CbQuery] :: (CanMutate method ~ 'False, GetModelAccess method ~ 'Callback) => (m model -> m a) -> HandlerType method model event m a [Cmd] :: (CanMutate method ~ 'True, GetModelAccess method ~ 'Direct) => (model -> m (model -> a, [event])) -> HandlerType method model event m a [CbCmd] :: (CanMutate method ~ 'True, GetModelAccess method ~ 'Callback) => ((forall x. (model -> m (model -> x, [event])) -> m x) -> m a) -> HandlerType method model event m a -- | P is used for specifying the parameters of the model. The name will be -- used as the name in the JSON encoding or the query parameter of the -- generated server. type family P (x :: ParamPart) (name :: Symbol) (a :: Type) -- | Used as a parameter to the P type family on order to determine -- the focus. data ParamPart ParamName :: ParamPart ParamType :: ParamPart type family CanMutate method :: Bool -- | The kind of an Action, defined with a GADT as: data MyAction :: Action -- where ThisAction :: P x "count" Int -> MyAction x 'Cmd Int -- ThatAction :: P x "description" Text -> MyAction x 'Cmd () type Action = ParamPart -> Type -> Type -> Type type Query = RequestType 'Direct '[JSON] (Verb 'GET 200 '[JSON]) type CbCmd = RequestType 'Callback '[JSON] (Verb 'POST 200 '[JSON]) type Cmd = RequestType 'Direct '[JSON] (Verb 'POST 200 '[JSON]) data ModelAccess Direct :: ModelAccess Callback :: ModelAccess data RequestType (accessType :: ModelAccess) (contentTypes :: [Type]) (verb :: Type -> Type) mapModel :: forall m event model0 model1 method a. Monad m => (model0 -> model1) -> HandlerType method model1 event m a -> HandlerType method model0 event m a mapEvent :: forall m e0 e1 a method model. Monad m => (e0 -> e1) -> HandlerType method model e0 m a -> HandlerType method model e1 m a mapResult :: Monad m => (r0 -> r1) -> HandlerType method model e m r0 -> HandlerType method model e m r1 runAction :: (MonadUnliftIO m, WriteModel p, model ~ Model p, event ~ Event p) => p -> ActionHandler model event m cmd -> cmd 'ParamType method ret -> m ret data ApiOptions ApiOptions :: (String -> String) -> String -> Maybe String -> ApiOptions [$sel:renameConstructor:ApiOptions] :: ApiOptions -> String -> String [$sel:typenameSeparator:ApiOptions] :: ApiOptions -> String [$sel:bodyNameBase:ApiOptions] :: ApiOptions -> Maybe String defaultApiOptions :: ApiOptions class HasApiOptions (action :: Action) apiOptions :: HasApiOptions action => ApiOptions -- | Configuration used to generate server This is expected to be generated -- by mkServerConfig. It is only explicit due to the GHC stage -- restrictions. data ServerConfig -- | Generate a server configuration and give it the specified name mkServerConfig :: String -> Q [Dec] mkServer :: ServerConfig -> Name -> Q [Dec]