module Azubi.Commands.Install where
import Azubi.Core.Context
import Azubi.Core.Revertable
import Azubi.Core.Command
type Package = String
class (Context a, Revertable a) => Installed a where
installed :: Package -> a -> [ Command ]
installed package context =
if (isRevert context) then
uninstallCommands
else
installCommands
where
uninstallCommands =
[ IfCommand (isInstalled context package)
([ InfoMsg $ "uninstalling " ++ package ] ++ (doUnInstall context package))
[ InfoMsg $ package ++ " is not installed" ]
]
installCommands =
[ IfCommand (isInstalled context package)
[ InfoMsg $ package ++ " is already installed" ]
$ [ InfoMsg $ "installing " ++ package ] ++ doInstall context package
]
isInstalled :: a -> Package -> BoolCommand
doInstall :: a -> Package -> [ Command ]
doUnInstall :: a -> Package -> [ Command ]