packages feed

composite-opaleye 0.2.0.0 → 0.3.0.0

raw patch · 4 files changed

+22/−29 lines, 4 filesdep −Framesdep −basic-preludePVP ok

version bump matches the API change (PVP)

Dependencies removed: Frames, basic-prelude

API changes (from Hackage documentation)

- Composite.Opaleye.ProductProfunctors: instance (Data.Profunctor.Product.Class.ProductProfunctor p, Composite.Opaleye.ProductProfunctors.PRec p rs) => Composite.Opaleye.ProductProfunctors.PRec p (s Frames.Col.:-> p a b : rs)
- Composite.Opaleye.ProductProfunctors: instance (Data.Profunctor.Product.Class.ProductProfunctor p, Data.Profunctor.Product.Default.Class.Default p a b, Data.Profunctor.Product.Default.Class.Default p (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity rsContra) (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity rsCo)) => Data.Profunctor.Product.Default.Class.Default p (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity (s Frames.Col.:-> a : rsContra)) (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity (s Frames.Col.:-> b : rsCo))
- Composite.Opaleye.ProductProfunctors: instance Data.Profunctor.Product.Class.ProductProfunctor p => Data.Profunctor.Product.Default.Class.Default p (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity '[]) (Data.Vinyl.Core.Rec Data.Vinyl.Functor.Identity '[])
- Composite.Opaleye.RecordTable: instance (Composite.Base.NamedField w, Composite.Base.NamedField r, Composite.Opaleye.RecordTable.DefaultRecTableField (Control.Lens.Wrapped.Unwrapped w) (Control.Lens.Wrapped.Unwrapped r), Composite.Opaleye.RecordTable.DefaultRecTable writes reads) => Composite.Opaleye.RecordTable.DefaultRecTable (w : writes) (r : reads)
+ Composite.Opaleye.ProductProfunctors: instance (Data.Profunctor.Product.Class.ProductProfunctor p, Composite.Opaleye.ProductProfunctors.PRec p rs) => Composite.Opaleye.ProductProfunctors.PRec p (s Composite.Record.:-> p a b : rs)
+ Composite.Opaleye.ProductProfunctors: instance (Data.Profunctor.Product.Class.ProductProfunctor p, Data.Profunctor.Product.Default.Class.Default p a b, Data.Profunctor.Product.Default.Class.Default p (Data.Vinyl.Core.Rec Data.Functor.Identity.Identity rsContra) (Data.Vinyl.Core.Rec Data.Functor.Identity.Identity rsCo)) => Data.Profunctor.Product.Default.Class.Default p (Data.Vinyl.Core.Rec Data.Functor.Identity.Identity (s Composite.Record.:-> a : rsContra)) (Data.Vinyl.Core.Rec Data.Functor.Identity.Identity (s Composite.Record.:-> b : rsCo))
+ Composite.Opaleye.ProductProfunctors: instance Data.Profunctor.Product.Class.ProductProfunctor p => Data.Profunctor.Product.Default.Class.Default p (Data.Vinyl.Core.Rec Data.Functor.Identity.Identity '[]) (Data.Vinyl.Core.Rec Data.Functor.Identity.Identity '[])
+ Composite.Opaleye.RecordTable: instance (GHC.TypeLits.KnownSymbol s, Composite.Opaleye.RecordTable.DefaultRecTableField w r, Composite.Opaleye.RecordTable.DefaultRecTable writes reads) => Composite.Opaleye.RecordTable.DefaultRecTable (s Composite.Record.:-> w : writes) (s Composite.Record.:-> r : reads)

Files

composite-opaleye.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack  name:           composite-opaleye-version:        0.2.0.0+version:        0.3.0.0 synopsis:       Opaleye SQL for Frames records description:    Integration between Frames records and Opaleye SQL, allowing records to be stored, retrieved, and queried from PostgreSQL. category:       Records@@ -18,12 +18,10 @@ library   hs-source-dirs:       src-  default-extensions: DataKinds FlexibleContexts FlexibleInstances LambdaCase MultiParamTypeClasses NoImplicitPrelude OverloadedStrings PolyKinds ScopedTypeVariables StrictData TemplateHaskell TypeFamilies TypeOperators ViewPatterns+  default-extensions: DataKinds FlexibleContexts FlexibleInstances LambdaCase MultiParamTypeClasses OverloadedStrings PolyKinds ScopedTypeVariables StrictData TemplateHaskell TypeFamilies TypeOperators ViewPatterns   ghc-options: -Wall -O2   build-depends:       base >= 4.7 && < 5-    , Frames-    , basic-prelude     , bytestring     , composite-base     , lens
src/Composite/Opaleye/ProductProfunctors.hs view
@@ -1,15 +1,12 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} module Composite.Opaleye.ProductProfunctors where -import BasicPrelude+import Composite.Record ((:->)(Val), Rec((:&), RNil))+import Data.Functor.Identity (Identity(Identity)) import Data.Profunctor (dimap) import Data.Profunctor.Product (ProductProfunctor, (***!)) import qualified Data.Profunctor.Product as PP import Data.Profunctor.Product.Default (Default(def))-import Data.Vinyl.Core (Rec((:&), RNil))-import Data.Vinyl.Functor (Identity(Identity))--- FIXME would nice to be generic to all vinyl records but then the types get really really hairy trying to assert Unwrapped r ~ p a b, project out a, and so on-import Frames ((:->)(Col))  -- |Type class implementing traversal of a record, yanking individual product profunctors @Record [p a b]@ -- (though with distinct @a@ and @b@ at each position) up to @p (Record as) (Record bs)@.@@ -36,9 +33,9 @@   type PRecContra p (s :-> p a b ': rs) = (s :-> a ': PRecContra p rs)   type PRecCo     p (s :-> p a b ': rs) = (s :-> b ': PRecCo     p rs) -  pRec (Identity (Col p) :& rs) =-    dimap (\ (Identity (Col a) :& aRs) -> (a, aRs))-          (\ (b, bRs) -> (Identity (Col b) :& bRs))+  pRec (Identity (Val p) :& rs) =+    dimap (\ (Identity (Val a) :& aRs) -> (a, aRs))+          (\ (b, bRs) -> (Identity (Val b) :& bRs))           (p ***! pRec rs)  instance ProductProfunctor p => Default p (Rec Identity '[]) (Rec Identity '[]) where@@ -47,8 +44,8 @@ instance forall p s a b rsContra rsCo. (ProductProfunctor p, Default p a b, Default p (Rec Identity rsContra) (Rec Identity rsCo))       => Default p (Rec Identity (s :-> a ': rsContra)) (Rec Identity (s :-> b ': rsCo)) where   def =-    dimap (\ (Identity (Col a) :& aRs) -> (a, aRs))-          (\ (b, bRs) -> (Identity (Col b) :& bRs))+    dimap (\ (Identity (Val a) :& aRs) -> (a, aRs))+          (\ (b, bRs) -> (Identity (Val b) :& bRs))           (step ***! recur)     where       step :: p a b
src/Composite/Opaleye/RecordTable.hs view
@@ -1,15 +1,12 @@ module Composite.Opaleye.RecordTable where -import BasicPrelude-import Composite.Base (NamedField(fieldName))-import Control.Lens (Wrapped(type Unwrapped, _Wrapped'), from, view)+import Composite.Record ((:->)(Val), Rec((:&), RNil))+import Data.Functor.Identity (Identity(Identity)) import Data.Profunctor (dimap) import Data.Profunctor.Product ((***!)) import qualified Data.Profunctor.Product as PP import Data.Proxy (Proxy(Proxy))-import Data.Text (unpack)-import Data.Vinyl.Core (Rec((:&), RNil))-import Data.Vinyl.Functor (Identity(Identity))+import GHC.TypeLits (KnownSymbol, symbolVal) import Opaleye (Column, TableProperties, required, optional)  -- |Helper typeclass which picks which of 'required' or 'optional' to use for a pair of write column type and read column type.@@ -50,18 +47,18 @@   defaultRecTable = dimap (const ()) (const RNil) PP.empty  instance-    forall r reads w writes.-    ( NamedField w, NamedField r-    , DefaultRecTableField (Unwrapped w) (Unwrapped r)+    forall s r reads w writes.+    ( KnownSymbol s+    , DefaultRecTableField w r     , DefaultRecTable writes reads-    ) => DefaultRecTable (w ': writes) (r ': reads) where+    ) => DefaultRecTable (s :-> w ': writes) (s :-> r ': reads) where   defaultRecTable =-    dimap (\ (Identity (view _Wrapped' -> w) :& writeRs) -> (w, writeRs))-          (\ (r, readRs) -> (Identity (view (from _Wrapped') r) :& readRs))+    dimap (\ (Identity (Val w) :& writeRs) -> (w, writeRs))+          (\ (r, readRs) -> (Identity (Val r) :& readRs))           (step  ***! recur)     where-      step :: TableProperties (Unwrapped w) (Unwrapped r)-      step = defaultRecTableField . unpack $ fieldName (Proxy :: Proxy r)+      step :: TableProperties w r+      step = defaultRecTableField $ symbolVal (Proxy :: Proxy s)       recur :: TableProperties (Rec Identity writes) (Rec Identity reads)       recur = defaultRecTable 
src/Composite/Opaleye/TH.hs view
@@ -1,9 +1,10 @@ module Composite.Opaleye.TH where -import BasicPrelude hiding (lift) import Composite.Opaleye.Util (constantColumnUsing) import Control.Lens ((<&>)) import qualified Data.ByteString.Char8 as BSC8+import Data.Maybe (fromMaybe)+import Data.Monoid ((<>)) import Data.Profunctor.Product.Default (Default, def) import Data.Traversable (for) import Database.PostgreSQL.Simple (ResultError(ConversionFailed, Incompatible, UnexpectedNull))