packages feed

axel-0.0.12: src/Axel/Eff/App.hs

module Axel.Eff.App where

import Axel.Prelude

import Axel.Eff.Console (Console, runConsole)
import Axel.Eff.Error (Error, renderError, unsafeRunError)
import Axel.Eff.FileSystem (FileSystem, runFileSystem)
import Axel.Eff.Ghci (Ghci, runStackGhci)
import Axel.Eff.Log (Log, runLogAsFileSystem)
import Axel.Eff.Process (Process, runProcess)
import Axel.Eff.Random (Random, runRandom)
import Axel.Eff.Resource (Resource, runResource)
import Axel.Eff.Time (Time, runTime)

import qualified Polysemy as Sem
import qualified Polysemy.Error as Sem

type AppEffs
   = '[ Log, Console, Sem.Error Error, FileSystem, Ghci, Process, Resource, Random, Time, Sem.Embed IO]

runApp :: Sem.Sem AppEffs a -> IO a
runApp =
  Sem.runM .
  runTime .
  runRandom .
  runResource .
  runProcess .
  runStackGhci .
  runFileSystem .
  unsafeRunError renderError .
  runConsole . runLogAsFileSystem (FilePath "axelCompilation.log")