{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE ScopedTypeVariables #-} -- | Simple MonadIO-based logging for 'MonadFSM' programs. module Motor.FSM.Logging where import Control.Monad.IO.Class import Data.Row.Records import Data.Proxy import Data.Reflection import Motor.FSM log :: (MonadIO (m i i), KnownSymbol n) => Name n -> String -> m (i :: Row *) (i :: Row *) () log (_ :: Name n) s = liftIO (putStrLn (prefix ++ ": " ++ s)) where prefix = reflect (Proxy :: Proxy n)