motor-0.1.0.0: src/Motor/FSM/Logging.hs
{-# 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.OpenRecords
import Data.Proxy
import Data.Reflection
import Motor.FSM
log ::
(MonadIO (m i i), KnownSymbol n, Reifies n String)
=> Name n
-> String
-> m (i :: Row *) (i :: Row *) ()
log (_ :: Name n) s = liftIO (putStrLn (prefix ++ ": " ++ s))
where prefix = reflect (Proxy :: Proxy n)