never executed always true always false
1 module HelVM.HelMA.Automaton.Extra where
2
3 import HelVM.HelMA.Automaton.API.BoolTypes
4 import HelVM.HelMA.Automaton.API.Env
5 import HelVM.HelMA.Automaton.API.EvalParams
6 import HelVM.HelMA.Automaton.API.IOTypes
7
8 import HelVM.HelIO.Control.Message
9
10 import HelVM.HelIO.Control.Safe
11
12 import Control.Monad.Logger
13
14 import qualified RIO
15
16 runAsRIO :: (MonadIO m, MonadReader env m, Has env) => LoggingT (SafeT m) a -> m a
17 runAsRIO action = do
18 logFunc <- RIO.view RIO.logFuncL
19 let logOutput _ source level msg = RIO.runRIO logFunc $ RIO.logGeneric source (toRioLevel level) (RIO.displayBytesUtf8 $ fromLogStr msg)
20 result <- runExceptT $ runLoggingT action logOutput
21 either ((*> RIO.exitFailure) . RIO.logError . RIO.display . errorsToText) pure result
22
23 readSourceFile :: Has env => Exec -> String -> RIO.RIO env Source
24 readSourceFile True = pure . toText
25 readSourceFile _ = readTextFileRio
26
27 fallback :: Has env => EvalParams -> RIO.RIO env ()
28 fallback = putLTextLnRio . show . source
29
30 toRioLevel :: LogLevel -> RIO.LogLevel
31 toRioLevel LevelError = RIO.LevelError
32 toRioLevel LevelWarn = RIO.LevelWarn
33 toRioLevel LevelInfo = RIO.LevelInfo
34 toRioLevel LevelDebug = RIO.LevelDebug
35 toRioLevel (LevelOther l) = RIO.LevelOther l