packages feed

seqid 0.1.0 → 0.2.0

raw patch · 2 files changed

+51/−31 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Data.SequenceId: SequenceIds :: SequenceId -> SequenceId -> SequenceIds
- Data.SequenceId: data SequenceError
- Data.SequenceId: data SequenceIds
- Data.SequenceId: evalSequenceT :: Monad m => SequenceId -> StateT LastSeqId m b -> m b
- Data.SequenceId: instance Eq SequenceError
- Data.SequenceId: instance Eq SequenceIds
- Data.SequenceId: instance Show LastSeqId
- Data.SequenceId: instance Show SequenceError
- Data.SequenceId: instance Show SequenceIds
- Data.SequenceId: type SequenceT = StateT LastSeqId
+ Data.SequenceId: SequenceIdError :: !SequenceIdErrorType -> !SequenceId -> !SequenceId -> SequenceIdError
+ Data.SequenceId: data SequenceIdError
+ Data.SequenceId: data SequenceIdErrorType
+ Data.SequenceId: errType :: SequenceIdError -> !SequenceIdErrorType
+ Data.SequenceId: evalSequenceIdT :: Monad m => SequenceId -> SequenceIdT m b -> m b
+ Data.SequenceId: instance Eq SequenceIdError
+ Data.SequenceId: instance Eq SequenceIdErrorType
+ Data.SequenceId: instance Show SequenceIdError
+ Data.SequenceId: instance Show SequenceIdErrorType
+ Data.SequenceId: type SequenceIdT = StateT SequenceId
- Data.SequenceId: SequenceIdDropped :: SequenceIds -> SequenceError
+ Data.SequenceId: SequenceIdDropped :: SequenceIdErrorType
- Data.SequenceId: SequenceIdDuplicated :: SequenceIds -> SequenceError
+ Data.SequenceId: SequenceIdDuplicated :: SequenceIdErrorType
- Data.SequenceId: checkSeqId :: SequenceId -> SequenceId -> Maybe SequenceError
+ Data.SequenceId: checkSeqId :: SequenceId -> SequenceId -> Maybe SequenceIdError
- Data.SequenceId: checkSeqIdM :: Monad m => SequenceId -> (SequenceT m) (Maybe SequenceError)
+ Data.SequenceId: checkSeqIdM :: Monad m => SequenceId -> (SequenceIdT m) (Maybe SequenceIdError)
- Data.SequenceId: currSeqId :: SequenceIds -> SequenceId
+ Data.SequenceId: currSeqId :: SequenceIdError -> !SequenceId
- Data.SequenceId: lastSeqId :: SequenceIds -> SequenceId
+ Data.SequenceId: lastSeqId :: SequenceIdError -> !SequenceId
- Data.SequenceId: nextSeqIdM :: Monad m => SequenceT m SequenceId
+ Data.SequenceId: nextSeqIdM :: Monad m => SequenceIdT m SequenceId

Files

seqid.cabal view
@@ -1,5 +1,5 @@ name:                seqid-version:             0.1.0+version:             0.2.0 synopsis:            Sequence ID production and consumption description:         Uniquely identify elements in a sequence. License:             BSD3
src/Data/SequenceId.hs view
@@ -1,60 +1,80 @@ module Data.SequenceId-       ( checkSeqIdM-       , checkSeqId-       , nextSeqIdM+       ( checkSeqId        , nextSeqId-       , SequenceError (..)-       , SequenceIds (..)++         -- * Monadic+       , checkSeqIdM+       , nextSeqIdM+       , SequenceIdT+       , evalSequenceIdT++         -- * Types+       , SequenceIdError (..)+       , SequenceIdErrorType (..)        , SequenceId-       , SequenceT-       , evalSequenceT        ) where  -import           Control.Monad.Trans.State (StateT, evalStateT, gets, modify,+import           Control.Monad.Trans.State (StateT, evalStateT, get, modify',                                             put) import           Data.Word                 (Word32)  -newtype LastSeqId = LastSeqId { unLastSeqId :: SequenceId } deriving Show-type SequenceT = StateT LastSeqId-type SequenceId = Word32+type SequenceIdT  = StateT SequenceId+type SequenceId   = Word32  -evalSequenceT :: Monad m => SequenceId -> StateT LastSeqId m b -> m b-evalSequenceT = flip evalStateT . LastSeqId+evalSequenceIdT :: Monad m => SequenceId -> SequenceIdT m b -> m b+evalSequenceIdT = flip evalStateT  -data SequenceIds =-    SequenceIds-    { lastSeqId :: SequenceId-    , currSeqId :: SequenceId+data SequenceIdError =+    SequenceIdError+    { errType   :: !SequenceIdErrorType+    , lastSeqId :: !SequenceId+    , currSeqId :: !SequenceId     } deriving (Eq, Show)  -data SequenceError-    = SequenceIdDropped SequenceIds-    | SequenceIdDuplicated SequenceIds+data SequenceIdErrorType+    = SequenceIdDropped+    | SequenceIdDuplicated     deriving (Eq, Show)  -checkSeqIdM :: Monad m => SequenceId -> (SequenceT m) (Maybe SequenceError)+------------------------------------------------------------------------------+-- | If the current sequence ID is greater than 1 more than the last sequence ID then the appropriate error is returned.+checkSeqIdM :: Monad m => SequenceId -- ^ Current sequence ID+            -> (SequenceIdT m) (Maybe SequenceIdError) checkSeqIdM currSeq = do-    lastSeq <- gets unLastSeqId-    put $ LastSeqId currSeq+    lastSeq <- get+    put $ max lastSeq currSeq     return $ checkSeqId lastSeq currSeq  -checkSeqId :: SequenceId -> SequenceId -> Maybe SequenceError+------------------------------------------------------------------------------+-- | If the difference between the sequence IDs is not 1 then the appropriate error is returned.+checkSeqId :: SequenceId -- ^ Last sequence ID+           -> SequenceId -- ^ Current sequence ID+           -> Maybe SequenceIdError checkSeqId lastSeq currSeq-    | (currSeq - lastSeq) > 1 = Just . SequenceIdDropped    $ SequenceIds lastSeq currSeq-    | (currSeq - lastSeq) < 1 = Just . SequenceIdDuplicated $ SequenceIds lastSeq currSeq-    | otherwise = Nothing+    | delta lastSeq currSeq > 1 = Just $ SequenceIdError SequenceIdDropped    lastSeq currSeq+    | delta lastSeq currSeq < 1 = Just $ SequenceIdError SequenceIdDuplicated lastSeq currSeq+    | otherwise                 = Nothing  -nextSeqIdM :: Monad m => SequenceT m SequenceId-nextSeqIdM = modify (LastSeqId . nextSeqId . unLastSeqId) >> gets unLastSeqId+delta :: SequenceId -> SequenceId -> Integer+delta lastSeq currSeq = toInteger currSeq - toInteger lastSeq  -nextSeqId :: SequenceId -> SequenceId+------------------------------------------------------------------------------+-- | Update to the next sequense ID+nextSeqIdM :: Monad m => SequenceIdT m SequenceId -- ^ Next sequence ID+nextSeqIdM = modify' nextSeqId >> get+++------------------------------------------------------------------------------+-- | Update to the next sequense ID+nextSeqId :: SequenceId -- ^ Last sequence ID+          -> SequenceId -- ^ Next sequence ID nextSeqId = (+1)