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 +2/−4
- src/Composite/Opaleye/ProductProfunctors.hs +7/−10
- src/Composite/Opaleye/RecordTable.hs +11/−14
- src/Composite/Opaleye/TH.hs +2/−1
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))