diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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
diff --git a/src/TypedFsm/Driver/Common.hs b/src/TypedFsm/Driver/Common.hs
--- a/src/TypedFsm/Driver/Common.hs
+++ b/src/TypedFsm/Driver/Common.hs
@@ -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
diff --git a/src/TypedFsm/Driver/General.hs b/src/TypedFsm/Driver/General.hs
--- a/src/TypedFsm/Driver/General.hs
+++ b/src/TypedFsm/Driver/General.hs
@@ -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)
diff --git a/typed-fsm.cabal b/typed-fsm.cabal
--- a/typed-fsm.cabal
+++ b/typed-fsm.cabal
@@ -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
