tricorder-0.3.0.0: src/Tricorder/CLI/Main.hs
module Tricorder.CLI.Main (main) where
import Atelier.Config (runConfig)
import Atelier.Effects.Arguments (runArgumentsIO)
import Atelier.Effects.Clock (runClock)
import Atelier.Effects.Conc (runConc)
import Atelier.Effects.Console (runConsole)
import Atelier.Effects.Delay (runDelay)
import Atelier.Effects.Env (runEnv)
import Atelier.Effects.Exit (runExit)
import Atelier.Effects.File (runFile)
import Atelier.Effects.FileSystem (runFileSystemIO)
import Atelier.Effects.Input (input, runInputEff)
import Atelier.Effects.Log (runLogNoOp)
import Atelier.Effects.Posix.Daemons (runDaemons)
import Atelier.Effects.Process (runProcessIO)
import Atelier.Effects.Timeout (runTimeout)
import Data.Default (def)
import Effectful (runEff)
import Effectful.Concurrent (runConcurrent)
import Effectful.Reader.Static (runReader)
import Tricorder.SourceLookup.SourceQuery (ModuleName, SourceQuery)
import Atelier.Effects.Cache qualified as Cache
import Atelier.Effects.Cache qualified as CacheConfig
import Atelier.Effects.FileSystem.Glob qualified as Glob
import Tricorder.CLI.Arguments (runArguments)
import Tricorder.CLI.UI.Brick (runBrick)
import Tricorder.CLI.UI.BrickChan (runBrickChan)
import Tricorder.Config (inputLoadedConfig, runLoadedConfig)
import Tricorder.Runtime (runLogPath, runPidFile, runProjectRoot, runRuntimeDir, runSocketPath)
import Tricorder.Session (Session (..), loadSession)
import Tricorder.Session.CabalFile (inputCabalFiles)
import Tricorder.Session.Command (Command (..))
import Tricorder.Socket.UnixSocket (runUnixSocketIO)
import Tricorder.SourceLookup.PackageId (PackageId)
import Tricorder.CLI.App qualified as App
import Tricorder.CLI.UI.Keys qualified as Keys
import Tricorder.SourceLookup qualified as SourceLookup
import Tricorder.SourceLookup.GhcPkg qualified as GhcPkg
import Tricorder.SourceLookup.Hackage qualified as Hackage
import Tricorder.SourceLookup.PackageStore qualified as PackageStore
main :: IO ()
main =
runEff
. runTimeout
. runConcurrent
. runConc
. runBrickChan
. runBrick
. runConsole
. runExit
. runClock
. runDelay
. runFile
. runFileSystemIO
. Glob.runIO
. runProjectRoot
. runRuntimeDir
. runPidFile
. runSocketPath
. runLogPath
. runLoadedConfig
. runConfig @"keybindings" @Keys.Config
. runDaemons
. runProcessIO
. runArgumentsIO
. runArguments
. runUnixSocketIO
. runEnv
. inputLoadedConfig
. runLogNoOp
. inputCabalFiles
. runInputEff loadSession
. runInputEff ((.command.repl) <$> input)
. runReader @CacheConfig.Config def
. Cache.runCacheTtl @ModuleName @PackageId
. Cache.runCacheTtl @(PackageId, SourceQuery) @SourceLookup.ModuleSourceResult
. GhcPkg.runGhcPkgIO
. PackageStore.run
. Hackage.run
$ App.run