never executed always true always false
1 module HelVM.HelMA.Automata.Zot.Evaluator (
2 runRio,
3 run,
4 evalParams,
5 evalWithFormat,
6 ) where
7
8 import HelVM.HelMA.Automata.Zot.Automaton
9 import HelVM.HelMA.Automata.Zot.Expression
10 import HelVM.HelMA.Automata.Zot.Parser
11
12 import qualified HelVM.HelMA.Automaton.API.AppOptions as App
13 import HelVM.HelMA.Automaton.API.Emit
14 import HelVM.HelMA.Automaton.API.Env
15 import HelVM.HelMA.Automaton.API.EvalParams
16 import HelVM.HelMA.Automaton.API.IOTypes
17
18 import HelVM.HelMA.Automaton.Eff.MonadEff
19
20 import HelVM.HelMA.Automaton.Extra
21
22 import HelVM.HelMA.Automaton.Types.LabelType
23
24 import HelVM.HelIO.Containers.Extra
25 import HelVM.HelIO.Control.Safe
26
27 import HelVM.HelIO.Digit.Digitable
28 import HelVM.HelIO.Digit.ToDigit
29
30 import HelVM.HelIO.ListLikeExtra
31
32 import Control.Monad.Writer.Lazy
33
34 import qualified RIO
35
36 runRio :: Has env => RIO.RIO env ()
37 runRio = runWithOptions =<< optionsRio where
38 runWithOptions o = run (App.emit o) . App.evalParams o =<< readSourceFileRio
39
40 run :: Has env => Emit -> EvalParams -> RIO.RIO env ()
41 run No = runAsRIO . evalParams
42 run _ = fallback
43
44 evalParams :: AppEff m => EvalParams -> m ()
45 evalParams p = putLine =<< evalWithFormat (formatType p) (source p) =<< getContentsText
46
47 evalWithFormat :: MonadSafe m => LabelType -> Source -> LText -> m Output
48 evalWithFormat BinaryLabel source input = pure $ showFoldable $ evalInternal source input
49 evalWithFormat TextLabel source input = (makeAsciiText28 . convert . evalInternal source) . showExpressionList =<< stringToDL (toString input)
50
51 evalInternal :: Source -> LText -> ExpressionDList
52 evalInternal source input = eval $ fromStrict source <> input
53
54 eval :: LText -> ExpressionDList
55 eval = execWriter . runExpressionList . parse