hasbolt-extras 0.0.1.1 → 0.0.1.2
raw patch · 5 files changed
+20/−5 lines, 5 filesPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
API changes (from Hackage documentation)
+ Database.Bolt.Extras.DSL.Typed: type (=:) (a :: k) (b :: l) = '(a, b)
Files
- CHANGELOG.md +4/−0
- hasbolt-extras.cabal +1/−1
- src/Database/Bolt/Extras/DSL/Typed.hs +7/−3
- src/Database/Bolt/Extras/DSL/Typed/Parameters.hs +4/−1
- src/Database/Bolt/Extras/DSL/Typed/Types.hs +4/−0
CHANGELOG.md view
@@ -6,6 +6,10 @@ ## [Unreleased] +## [0.0.1.2] - 2020-01-17+### Added+- `=:` type synonym to avoid ticks in type-level tuples.+ ## [0.0.1.1] - 2019-12-31 ### Added - `param` combinator to add named parameters to selectors;
hasbolt-extras.cabal view
@@ -1,5 +1,5 @@ name: hasbolt-extras-version: 0.0.1.1+version: 0.0.1.2 synopsis: Extras for hasbolt library description: Extras for hasbolt library homepage: https://github.com/biocad/hasbolt-extras#readme
src/Database/Bolt/Extras/DSL/Typed.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE ExplicitNamespaces #-}+ {- | Type-safe DSL for Cypher This module extends selectors from 'Database.Bolt.Extras.DSL.DSL' with extra type-level@@ -24,6 +26,7 @@ , prop , propMaybe , param+ , type (=:) , (=:) , NodeSelector, RelSelector , nodeSelector, relSelector@@ -53,9 +56,9 @@ ) where -import Database.Bolt.Extras.DSL.Typed.Instances ()-import Database.Bolt.Extras.DSL.Typed.Types+import Database.Bolt.Extras.DSL.Typed.Instances () import Database.Bolt.Extras.DSL.Typed.Parameters+import Database.Bolt.Extras.DSL.Typed.Types {- $setup >>> :set -XDeriveGeneric@@ -63,6 +66,7 @@ >>> :set -XOverloadedLabels >>> :set -XOverloadedStrings >>> :set -XDataKinds+>>> :set -XTypeOperators >>> :load Database.Bolt.Extras.Graph Database.Bolt.Extras.DSL.Typed Database.Bolt.Extras.DSL >>> import Database.Bolt.Extras.DSL.Typed >>> import Data.Text (Text, unpack)@@ -267,7 +271,7 @@ There is an option to annotate queries ('Database.Bolt.Extras.DSL.CypherDSL') with parameters they accept, like this: -> fooQ :: CypherDSLParams '[ '("foo", Int), '("bar", Text) ]+> fooQ :: CypherDSLParams '["foo" =: Int, "bar" =: Text] > fooQ = CypherDSLParams $ do > matchF [ PS $ p $ #n .& lbl @Foo .& param (#foo =: "foo") .& param (#bar =: "bar") > returnF ["n"]
src/Database/Bolt/Extras/DSL/Typed/Parameters.hs view
@@ -30,6 +30,7 @@ >>> :set -XOverloadedLabels >>> :set -XDataKinds >>> :set -XOverloadedStrings+>>> :set -XTypeOperators >>> :load Database.Bolt.Extras.DSL.Typed.Instances Database.Bolt.Extras.DSL.Typed.Parameters >>> import Control.Monad.IO.Class >>> import Database.Bolt (BoltActionT, Record)@@ -39,6 +40,8 @@ -- | A wrapper around arbitrary 'CypherDSL' expression which stores type-level list of named -- parameters (@$foo@) with their types.+--+-- It is convenient to write signatures using '(=:)' type synonym. newtype CypherDSLParams (params :: [(Symbol, Type)]) (a :: Type) = CypherDSLParams (CypherDSL a) @@ -68,7 +71,7 @@ -- -- A couple of examples: ----- >>> dsl = CypherDSLParams (returnF []) :: CypherDSLParams '[ '("foo", Int), '("bar", Text) ] ()+-- >>> dsl = CypherDSLParams (returnF []) :: CypherDSLParams '["foo" =: Int, "bar" =: Text] () -- >>> :t queryWithParams dsl -- queryWithParams dsl -- :: MonadIO m =>
src/Database/Bolt/Extras/DSL/Typed/Types.hs view
@@ -4,6 +4,7 @@ {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilyDependencies #-} {-# LANGUAGE TypeInType #-}+{-# LANGUAGE TypeOperators #-} module Database.Bolt.Extras.DSL.Typed.Types where @@ -146,6 +147,9 @@ => (SymbolS field, Text) -> a types -> a types param = withParam++-- | Smart constructor for type-level tuples, to avoid writing @'("foo", Int)@ with extra tick.+type (=:) (a :: k) (b :: l) = '(a, b) -- | Smart constructor for a pair of field name and its value. To be used with @OverloadedLabels@: --