never executed always true always false
    1 module HelVM.HelMA.Automaton.API.Env where
    2 
    3 import           HelVM.HelMA.Automaton.API.AppOptions
    4 import           HelVM.HelMA.Automaton.API.IOTypes
    5 
    6 import qualified Codec.Picture                        as Picture
    7 
    8 import qualified RIO
    9 
   10 type Has env = (HasIO env, HasAppOptions env, RIO.HasLogFunc env)
   11 type HasIO env = (HasFileIO env, HasStdIO env)
   12 
   13 readSourceFileRio :: Has env => RIO.RIO env Source
   14 readSourceFileRio = readSourceFileWithOptions =<< optionsRio where
   15   readSourceFileWithOptions = readSourceFile <$> exec <*> file
   16   readSourceFile True = pure . toText
   17   readSourceFile _    = readTextFileRio
   18 
   19 readTextFileRio :: Has env => FilePath -> RIO.RIO env Source
   20 readTextFileRio = (RIO.view fileIOL >>=) . flip readTextFile
   21 
   22 readImageRio :: Has env => FilePath -> RIO.RIO env Picture.DynamicImage
   23 readImageRio = (RIO.view fileIOL >>=) . flip readImage
   24 
   25 putLTextLnRio :: Has env => LText -> RIO.RIO env ()
   26 putLTextLnRio = (RIO.view stdIOL >>=) . flip stdPutLTextLn
   27 
   28 getContentsTextRio :: Has env => RIO.RIO env LText
   29 getContentsTextRio = RIO.view stdIOL >>= stdGetContentsText
   30 
   31 putLBSLnRio :: Has env => LByteString -> RIO.RIO env ()
   32 putLBSLnRio = (RIO.view stdIOL >>=) . flip stdPutLBSLn
   33 
   34 getContentsBSRio :: Has env => RIO.RIO env LByteString
   35 getContentsBSRio = RIO.view stdIOL >>= stdGetContentsBS
   36 
   37 optionsRio :: Has env => RIO.RIO env AppOptions
   38 optionsRio = RIO.view appOptionsL
   39 
   40 logFuncRio :: Has env => RIO.RIO env RIO.LogFunc
   41 logFuncRio = RIO.view RIO.logFuncL
   42 
   43 data Env = Env
   44   { envFileIO  :: FileIO
   45   , envStdIO   :: StdIO
   46   , envOptions :: AppOptions
   47   , envLogFunc :: RIO.LogFunc
   48   }
   49 
   50 data FileIO = FileIO
   51   { readTextFile :: forall env. FilePath -> RIO.RIO env Source
   52   , readImage    :: forall env. FilePath -> RIO.RIO env Picture.DynamicImage
   53   }
   54 
   55 class HasFileIO env where
   56   fileIOL :: RIO.Lens' env FileIO
   57 
   58 instance HasFileIO Env where
   59   fileIOL = RIO.lens envFileIO (\x y -> x { envFileIO = y })
   60 
   61 data StdIO = StdIO
   62   { stdPutLTextLn      :: forall env. LText -> RIO.RIO env ()
   63   , stdGetContentsText :: forall env. RIO.RIO env LText
   64   , stdPutLBSLn        :: forall env. LByteString -> RIO.RIO env ()
   65   , stdGetContentsBS   :: forall env. RIO.RIO env LByteString
   66   }
   67 
   68 class HasStdIO env where
   69   stdIOL :: RIO.Lens' env StdIO
   70 
   71 instance HasStdIO Env where
   72   stdIOL = RIO.lens envStdIO (\x y -> x { envStdIO = y })
   73 
   74 class HasAppOptions env where
   75   appOptionsL :: RIO.Lens' env AppOptions
   76 
   77 instance HasAppOptions Env where
   78   appOptionsL = RIO.lens envOptions (\x y -> x { envOptions = y })
   79 
   80 instance RIO.HasLogFunc Env where
   81   logFuncL = RIO.lens envLogFunc (\x y -> x { envLogFunc = y })