typed-fsm 0.2.0.0 → 0.2.0.1
raw patch · 4 files changed
+20/−10 lines, 4 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- TypedFsm.Driver.Common: getSomeOperateSingeton :: forall ts (m :: Type -> Type) a. SingKind ts => SomeOperate ts m a -> Sing ts
+ TypedFsm.Driver.Common: getSomeOperateSing :: forall ts (m :: Type -> Type) a (r :: ts). SingKind ts => SomeOperate ts m a -> Sing r
+ TypedFsm.Driver.General: Ignore :: UnexpectMsgHandler ps (m :: Type -> Type)
+ TypedFsm.Driver.General: IgnoreAndTrace :: (AnyMsg ps -> m ()) -> UnexpectMsgHandler ps (m :: Type -> Type)
+ TypedFsm.Driver.General: Terminal :: UnexpectMsgHandler ps (m :: Type -> Type)
+ TypedFsm.Driver.General: data UnexpectMsgHandler ps (m :: Type -> Type)
- TypedFsm.Driver.General: runOperate :: forall ps m a (input :: ps) (output :: ps). (Monad m, SingI input, SEq ps) => [AnyMsg ps] -> Operate m (At a output) input -> m (Result ps (UnexpectMsg ps) m a)
+ TypedFsm.Driver.General: runOperate :: forall ps m a (input :: ps) (output :: ps). (Monad m, SingI input, SEq ps) => UnexpectMsgHandler ps m -> [AnyMsg ps] -> Operate m (At a output) input -> m (Result ps (UnexpectMsg ps) m a)
Files
- CHANGELOG.md +3/−2
- src/TypedFsm/Driver/Common.hs +2/−2
- src/TypedFsm/Driver/General.hs +14/−5
- typed-fsm.cabal +1/−1
CHANGELOG.md view
@@ -1,5 +1,6 @@ # Revision history for typed-fsm -## 0.1.0.0 -- YYYY-mm-dd+## 0.2.0.1-- 2024-7-22 -* First version. Released on an unsuspecting world.+* Fix getSomeOperateSing+* Improve runOperate
src/TypedFsm/Driver/Common.hs view
@@ -16,8 +16,8 @@ (SingI i) => SomeOperate (Operate m (At a o) i) -getSomeOperateSingeton :: (SingKind ts) => SomeOperate ts m a -> Sing ts-getSomeOperateSingeton (SomeOperate (_ :: Operate m ia i)) =+getSomeOperateSing :: (SingKind ts) => SomeOperate ts m a -> Sing (r :: ts)+getSomeOperateSing (SomeOperate (_ :: Operate m ia i)) = unsafeCoerce $ sing @i getSomeOperateSt :: (SingKind ts) => SomeOperate ts m a -> Demote ts
src/TypedFsm/Driver/General.hs view
@@ -28,22 +28,31 @@ newtype UnexpectMsg ps = UnexpectMsg (AnyMsg ps) +data UnexpectMsgHandler ps m+ = Ignore+ | IgnoreAndTrace (AnyMsg ps -> m ())+ | Terminal+ runOperate :: forall ps m a (input :: ps) (output :: ps) . ( Monad m , SingI input , SEq ps )- => [AnyMsg ps]+ => UnexpectMsgHandler ps m+ -> [AnyMsg ps] -> Operate m (At a output) input -> m (Result ps (UnexpectMsg ps) m a)-runOperate anyMsgs = \case+runOperate unHandler anyMsgs = \case IReturn (At a) -> pure (Finish a)- LiftM m -> m >>= (runOperate anyMsgs)+ LiftM m -> m >>= (runOperate unHandler anyMsgs) In f -> loop anyMsgs where loop [] = pure $ Cont $ SomeOperate (In f) loop (anyMsg : evns') = do case anyToSomeMsg @_ @input anyMsg of- Nothing -> pure (ErrorInfo $ UnexpectMsg anyMsg)- Just (SomeMsg msg) -> runOperate evns' (f msg)+ Nothing -> case unHandler of+ Ignore -> loop evns'+ IgnoreAndTrace trace -> trace anyMsg >> loop evns'+ Terminal -> pure (ErrorInfo $ UnexpectMsg anyMsg)+ Just (SomeMsg msg) -> runOperate unHandler evns' (f msg)
typed-fsm.cabal view
@@ -20,7 +20,7 @@ -- PVP summary: +-+------- breaking API changes -- | | +----- non-breaking API additions -- | | | +--- code changes with no API change-version: 0.2.0.0+version: 0.2.0.1 -- A short (one-line) description of the package. synopsis: A framework for strongly typed FSM