polysemy-kvstore 0.1.2.0 → 0.1.3.0
raw patch · 2 files changed
+31/−28 lines, 2 filesdep ~basedep ~containersdep ~polysemyPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base, containers, polysemy
API changes (from Hackage documentation)
- Polysemy.KVStore: lookupKV :: forall k_a4kx v_a4ky r_a5JD. MemberWithError (KVStore k_a4kx v_a4ky) r_a5JD => k_a4kx -> Sem r_a5JD (Maybe v_a4ky)
+ Polysemy.KVStore: lookupKV :: forall k_a4mt v_a4mu r_a5L5. Member (KVStore k_a4mt v_a4mu) r_a5L5 => k_a4mt -> Sem r_a5L5 (Maybe v_a4mu)
- Polysemy.KVStore: updateKV :: forall k_a4kW v_a4kX r_a5JF. MemberWithError (KVStore k_a4kW v_a4kX) r_a5JF => k_a4kW -> Maybe v_a4kX -> Sem r_a5JF ()
+ Polysemy.KVStore: updateKV :: forall k_a4mS v_a4mT r_a5L7. Member (KVStore k_a4mS v_a4mT) r_a5L7 => k_a4mS -> Maybe v_a4mT -> Sem r_a5L7 ()
Files
- polysemy-kvstore.cabal +7/−7
- src/Polysemy/KVStore.hs +24/−21
polysemy-kvstore.cabal view
@@ -1,11 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.34.4.+-- This file has been generated from package.yaml by hpack version 0.34.7. -- -- see: https://github.com/sol/hpack name: polysemy-kvstore-version: 0.1.2.0+version: 0.1.3.0 synopsis: KVStore effect for polysemy. description: KVStore effect for polysemy. category: Polysemy@@ -21,7 +21,7 @@ source-repository head type: git- location: https://gitlab.com/homotopic-tech/polysemy-kvstore+ location: https://gitlab.homotopic.tech/haskell/polysemy-kvstore library exposed-modules:@@ -30,9 +30,9 @@ Paths_polysemy_kvstore hs-source-dirs: src- ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints+ ghc-options: -Weverything -Wno-all-missed-specialisations -Wno-implicit-prelude -Wno-monomorphism-restriction -Wno-missing-local-signatures -Wno-missing-safe-haskell-mode -Wno-prepositive-qualified-module -Wno-orphans -Wno-safe -Wno-unsafe build-depends:- base >=4.7 && <5- , containers- , polysemy >=1.3.0.0 && <1.7+ base >=4.9 && <5+ , containers >=0.5 && <0.7+ , polysemy >=1.3.0.0 && <1.8 default-language: Haskell2010
src/Polysemy/KVStore.hs view
@@ -1,15 +1,15 @@-{-# LANGUAGE AllowAmbiguousTypes #-}-{-# LANGUAGE BlockArguments #-}-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE ExplicitForAll #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE LambdaCase #-}-{-# LANGUAGE PolyKinds #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TemplateHaskell #-}-{-# LANGUAGE TypeApplications #-}-{-# LANGUAGE TypeOperators #-}+{-# LANGUAGE AllowAmbiguousTypes #-}+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE StandaloneKindSignatures #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeOperators #-} module Polysemy.KVStore ( -- * Effect@@ -24,7 +24,7 @@ updateKV, modifyKV, - -- * Interpretations+ -- * Interpreters runKVStoreAsState, runKVStorePure, runKVStoreAsKVStore,@@ -32,14 +32,17 @@ ) where -import qualified Data.Map as M-import Data.Maybe (isJust)-import Polysemy-import Polysemy.Error-import Polysemy.State+import Data.Kind (Type)+import qualified Data.Map as M+import Data.Maybe (isJust)+import Polysemy (Member, Members, Sem, interpret, makeSem,+ reinterpret)+import Polysemy.Error (Error, fromEither)+import Polysemy.State (State, gets, modify, runState) -- | Models things like Redis, HTTP GET/POST, etc. Things that are keyed, have -- a value, and may or may not be there.+type KVStore :: Type -> Type -> (Type -> Type) -> Type -> Type data KVStore k v m a where LookupKV :: k -> KVStore k v m (Maybe v) UpdateKV :: k -> Maybe v -> KVStore k v m ()@@ -93,7 +96,7 @@ Sem r () modifyKV d f k = lookupKV k >>= \case- Just v -> writeKV k $ f v+ Just v -> writeKV k $ f v Nothing -> writeKV k $ f d -- | Run a `KVStore` as a `State` effect containing a `Map`.@@ -101,7 +104,7 @@ -- @since 0.1.0.0 runKVStoreAsState :: Ord k => Sem (KVStore k v ': r) a -> Sem (State (M.Map k v) ': r) a runKVStoreAsState = reinterpret $ \case- LookupKV k -> gets $ M.lookup k+ LookupKV k -> gets $ M.lookup k UpdateKV k v -> modify $ M.alter (const v) k {-# INLINE runKVStoreAsState #-} @@ -131,7 +134,7 @@ Sem (KVStore k v ': r) a -> Sem (KVStore k' v' ': r) a runKVStoreAsKVStore f g h = reinterpret \case- LookupKV k -> fmap h <$> lookupKV @k' @v' (f k)+ LookupKV k -> fmap h <$> lookupKV @k' @v' (f k) UpdateKV k x -> updateKV @k' @v' (f k) (fmap g x) {-# INLINE runKVStoreAsKVStore #-}