packages feed

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 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