Improve API for detecting required tools on start
chshersh opened this issue · 2 comments
chshersh commented
Iris.need
is the main function for checking whether a specified tool executable in PATH:
need :: MonadIO m => [Tool] -> m ()
It supposed to be used like this in the main application code:
app :: App ()
app = Iris.asksCliEnv Iris.cliEnvCmd >>= \case
Download url -> do
need ["curl"]
runDownload url
Evaluate hs -> do
need ["ghc", "cabal"]
runEvaluate hs
Where the Tool
type is the following:
Lines 43 to 71 in c1597ee
It does the job but it's a bit suboptimal and maybe inconvenient at times.
I'd love to improve this API in the following way:
- Provide eDSL for specifying the minimum required version
- Provide eDSL for specifying the flag for checking the version
With such an eDSL, it should be possible to write the following code:
ghc :: Iris.Tool
ghc = "ghc" `Iris.versionAtLeast` [8, 10, 7] `Iris.usingVersionFlag` "--numeric-version"
cabal :: Iris.Tool
cabal = "cabal" `Iris.versionAtLeast` [3, 6, 2, 0] `Iris.usingVersionFlag` "--numeric-version"
app :: App ()
app = Iris.asksCliEnv Iris.cliEnvCmd >>= \case
Download url -> do
need ["curl"]
runDownload url
Evaluate hs -> do
need [ghc, cabal]
runEvaluate hs
The checkToolFunction
should patched accordingly.
chshersh commented
Part of the API improvements are described in:
german1608 commented
I'd like to work on this after #97 is merged, but I don't understand what you're suggesting on the second task. Could you help clarifying it please?