packages feed

axel-0.0.13: test/Axel/Test/Eff/AppMock.hs

module Axel.Test.Eff.AppMock where

import Axel.Prelude

import qualified Axel.Eff.Console as Effs
import Axel.Eff.Error as Error
import qualified Axel.Eff.FileSystem as Effs
import qualified Axel.Eff.Ghci as Effs
import qualified Axel.Eff.Log as Effs
import qualified Axel.Eff.Process as Effs
import qualified Axel.Eff.Resource as Effs
import Axel.Test.Eff.ConsoleMock
import Axel.Test.Eff.FileSystemMock
import Axel.Test.Eff.GhciMock
import Axel.Test.Eff.ProcessMock
import Axel.Test.Eff.ResourceMock

import qualified Effectful as Eff
import qualified Effectful.Error.Static as Eff

type AppEffs
   = '[ Effs.Log, Effs.Console, Eff.Error Error.Error, Effs.Ghci, Effs.Process, Effs.FileSystem, Effs.Resource, Eff.Error Text]

runApp ::
     (processEffs ~ '[ Effs.FileSystem, Effs.Resource, Eff.Error Text])
  => ConsoleState
  -> FileSystemState
  -> GhciState
  -> ProcessState processEffs
  -> Eff.Eff AppEffs a
  -> ( (((a, ConsoleState), GhciState), ProcessState processEffs)
     , FileSystemState)
runApp origConsoleState origFSState origGhciState origProcState =
  Eff.runPureEff .
  unsafeRunError id .
  runResource .
  runFileSystem origFSState .
  runProcess origProcState .
  runGhci origGhciState .
  unsafeRunError renderError . runConsole origConsoleState . Effs.ignoreLog

evalApp ::
     (processEffs ~ '[ Effs.FileSystem, Effs.Resource, Eff.Error Text])
  => ConsoleState
  -> FileSystemState
  -> GhciState
  -> ProcessState processEffs
  -> Eff.Eff AppEffs a
  -> a
evalApp origConsoleState origFSState origGhciState origProcState =
  fst .
  fst .
  fst . fst . runApp origConsoleState origFSState origGhciState origProcState

evalApp' :: Eff.Eff AppEffs a -> a
evalApp' = evalApp origConsoleState origFSState origGhciState origProcState
  where
    origConsoleState = mkConsoleState
    origFSState = mkFileSystemState []
    origGhciState = mkGhciState []
    origProcState = mkProcessState [] []