-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Tool for creating completely configured production Haskell projects.
--   
--   Tool for creating completely configured production Haskell projects.
--   See README.md for details.
@package summoner
@version 1.0.6


-- | This module contains functions for colorful printing into terminal.
module Summoner.Ansi

-- | ANSI colors: come in various intensities, which are controlled by
--   <a>ColorIntensity</a>
data Color
Black :: Color
Red :: Color
Green :: Color
Yellow :: Color
Blue :: Color
Magenta :: Color
Cyan :: Color
White :: Color
putStrFlush :: Text -> IO ()

-- | Takes list of formatting options, prints text using this format
--   options.
beautyPrint :: [IO ()] -> Text -> IO ()

-- | Starts bold printing.
bold :: IO ()
boldText :: Text -> IO ()
boldDefault :: Text -> IO ()
italic :: IO ()

-- | Resets all previous settings.
reset :: IO ()
prompt :: IO Text
setColor :: Color -> IO ()
successMessage :: Text -> IO ()
warningMessage :: Text -> IO ()
errorMessage :: Text -> IO ()
infoMessage :: Text -> IO ()
skipMessage :: Text -> IO ()

module Summoner.License
newtype License
License :: Text -> License
[unLicense] :: License -> Text
customizeLicense :: Text -> Text -> Text -> Text -> Text
licenseNames :: [License]
githubLicenseQueryNames :: [(License, Text)]
instance GHC.Show.Show Summoner.License.License
instance GHC.Classes.Ord Summoner.License.License
instance GHC.Classes.Eq Summoner.License.License
instance Data.String.IsString Summoner.License.License
instance Data.Aeson.Types.FromJSON.FromJSON Summoner.License.License


-- | This module contains various function to work with commands.
module Summoner.Process
deleteFile :: FilePath -> IO ()
instance (a ~ Data.Text.Internal.Text, b ~ ()) => Data.String.IsString ([a] -> GHC.Types.IO b)

module Summoner.ProjectData

-- | Data needed for project creation.
data ProjectData
ProjectData :: Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> [GhcVer] -> Text -> Maybe CustomPrelude -> [Text] -> Bool -> Bool -> ProjectData

-- | repository name
[repo] :: ProjectData -> Text

-- | github username
[owner] :: ProjectData -> Text

-- | project description
[description] :: ProjectData -> Text

-- | full name
[nm] :: ProjectData -> Text

-- | e-mail
[email] :: ProjectData -> Text

-- | year
[year] :: ProjectData -> Text

-- | project category
[category] :: ProjectData -> Text

-- | type of license
[license] :: ProjectData -> Text

-- | license text
[licenseText] :: ProjectData -> Text

-- | github repository
[github] :: ProjectData -> Bool

-- | Travis CI integration
[travis] :: ProjectData -> Bool

-- | AppVeyor CI integration
[appVey] :: ProjectData -> Bool

-- | build script
[script] :: ProjectData -> Bool

-- | is library
[isLib] :: ProjectData -> Bool

-- | is executable
[isExe] :: ProjectData -> Bool

-- | add tests
[test] :: ProjectData -> Bool

-- | add benchmarks
[bench] :: ProjectData -> Bool

-- | ghc versions
[testedVersions] :: ProjectData -> [GhcVer]

-- | Base library to use
[base] :: ProjectData -> Text

-- | custom prelude to be used
[prelude] :: ProjectData -> Maybe CustomPrelude

-- | default extensions
[extensions] :: ProjectData -> [Text]
[cabal] :: ProjectData -> Bool
[stack] :: ProjectData -> Bool

-- | Represents some selected set of GHC versions.
data GhcVer
Ghc7103 :: GhcVer
Ghc801 :: GhcVer
Ghc802 :: GhcVer
Ghc822 :: GhcVer
Ghc843 :: GhcVer

-- | Supported by <tt>summoner</tt> GHC versions for project templates.
supportedGhcVers :: [GhcVer]

-- | Converts numeric dot-separated GHC version into <a>GhcVer</a>.
parseGhcVer :: Text -> Maybe GhcVer

-- | Converts <a>GhcVer</a> into dot-separated string.
showGhcVer :: GhcVer -> Text

-- | Returns latest known LTS resolver for all GHC versions except default
--   one.
latestLts :: GhcVer -> Text
baseNopreludeVer :: GhcVer -> Text

-- | Used for detecting the user decision during CLI input.
data Decision
Yes :: Decision
Nop :: Decision
Idk :: Decision
data CustomPrelude
Prelude :: Text -> Text -> CustomPrelude
[cpPackage] :: CustomPrelude -> Text
[cpModule] :: CustomPrelude -> Text
data Answer
Y :: Answer
N :: Answer
yesOrNo :: Text -> Maybe Answer
instance GHC.Show.Show Summoner.ProjectData.ProjectData
instance GHC.Show.Show Summoner.ProjectData.CustomPrelude
instance GHC.Enum.Bounded Summoner.ProjectData.GhcVer
instance GHC.Enum.Enum Summoner.ProjectData.GhcVer
instance GHC.Show.Show Summoner.ProjectData.GhcVer
instance GHC.Classes.Ord Summoner.ProjectData.GhcVer
instance GHC.Classes.Eq Summoner.ProjectData.GhcVer
instance GHC.Generics.Generic Summoner.ProjectData.Decision
instance GHC.Enum.Bounded Summoner.ProjectData.Decision
instance GHC.Enum.Enum Summoner.ProjectData.Decision
instance GHC.Classes.Eq Summoner.ProjectData.Decision
instance GHC.Show.Show Summoner.ProjectData.Decision
instance GHC.Base.Semigroup Summoner.ProjectData.Decision
instance GHC.Base.Monoid Summoner.ProjectData.Decision
instance Generics.Deriving.Semigroup.GSemigroup Summoner.ProjectData.Decision
instance Generics.Deriving.Monoid.GMonoid Summoner.ProjectData.Decision


-- | This module contains some default values to use.
module Summoner.Default
defaultGHC :: GhcVer
defaultTomlFile :: String
defaultConfigFile :: IO FilePath
currentYear :: IO Text
endLine :: Text

module Summoner.Text

-- | Creates module name from the name of the package Ex:
--   <tt>my-lovely-project</tt> — <tt>MyLovelyProject</tt>
packageToModule :: Text -> Text

-- | Converts every element of list into <a>Text</a> and then joins every
--   element into single <a>Text</a> like <a>intercalate</a>.
intercalateMap :: Text -> (a -> Text) -> [a] -> Text
headToUpper :: Text -> Text


-- | This module contains function to proper questioning in terminal.
module Summoner.Question
printQuestion :: Text -> [Text] -> IO ()
choose :: Text -> [Text] -> IO Text
chooseYesNo :: Text -> IO a -> IO a -> IO a
chooseYesNoBool :: Text -> IO Bool
query :: Text -> IO Text
queryDef :: Text -> Text -> IO Text
queryManyRepeatOnFail :: forall a. (Text -> Maybe a) -> IO [a]
checkUniqueName :: Text -> IO Text
targetMessageWithText :: Bool -> Text -> Text -> IO Bool
trueMessage :: Text -> IO Bool
falseMessage :: Text -> IO Bool

module Summoner.Tree

-- | Describes simple structure of filesystem tree.
data TreeFs

-- | Name of directory (relative) and its containing entries
Dir :: FilePath -> [TreeFs] -> TreeFs

-- | File name (relative) and file content
File :: FilePath -> Text -> TreeFs

-- | Walks through directory tree and write file contents, creating all
--   intermediate directories.
traverseTree :: TreeFs -> IO ()

-- | Pretty shows the directory tree content.
showTree :: TreeFs -> Text


-- | This module contains functions for stack template creation.
module Summoner.Template

-- | Creating template file to use in `stack new` command
createStackTemplate :: ProjectData -> TreeFs

module Summoner.Validation

-- | <a>Validation</a> is <a>Either</a> with a Left that is a <a>Monoid</a>
data Validation e a
Failure :: e -> Validation e a
Success :: a -> Validation e a
instance (GHC.Show.Show e, GHC.Show.Show a) => GHC.Show.Show (Summoner.Validation.Validation e a)
instance (GHC.Classes.Ord e, GHC.Classes.Ord a) => GHC.Classes.Ord (Summoner.Validation.Validation e a)
instance (GHC.Classes.Eq e, GHC.Classes.Eq a) => GHC.Classes.Eq (Summoner.Validation.Validation e a)
instance GHC.Base.Functor (Summoner.Validation.Validation e)
instance GHC.Base.Semigroup e => GHC.Base.Semigroup (Summoner.Validation.Validation e a)
instance GHC.Base.Semigroup e => GHC.Base.Applicative (Summoner.Validation.Validation e)


-- | Summoner configurations.
module Summoner.Config

-- | Potentially incomplete configuration.
data ConfigP (p :: Phase)
Config :: p :- Text -> p :- Text -> p :- Text -> p :- License -> p :- [GhcVer] -> Decision -> Decision -> Decision -> Decision -> Decision -> Decision -> Decision -> Decision -> Decision -> Decision -> Decision -> Last CustomPrelude -> [Text] -> ConfigP
[cOwner] :: ConfigP -> p :- Text
[cFullName] :: ConfigP -> p :- Text
[cEmail] :: ConfigP -> p :- Text
[cLicense] :: ConfigP -> p :- License
[cGhcVer] :: ConfigP -> p :- [GhcVer]
[cCabal] :: ConfigP -> Decision
[cStack] :: ConfigP -> Decision
[cGitHub] :: ConfigP -> Decision
[cTravis] :: ConfigP -> Decision
[cAppVey] :: ConfigP -> Decision
[cPrivate] :: ConfigP -> Decision
[cScript] :: ConfigP -> Decision
[cLib] :: ConfigP -> Decision
[cExe] :: ConfigP -> Decision
[cTest] :: ConfigP -> Decision
[cBench] :: ConfigP -> Decision
[cPrelude] :: ConfigP -> Last CustomPrelude
[cExtensions] :: ConfigP -> [Text]

-- | Incomplete configurations.
type PartialConfig = ConfigP  'Partial

-- | Complete configurations.
type Config = ConfigP  'Final

-- | Default <a>Config</a> configurations.
defaultConfig :: PartialConfig

-- | Make sure that all the required configurations options were specified.
finalise :: PartialConfig -> Validation [Text] Config

-- | Read configuration from the given file and return it in data type.
loadFileConfig :: MonadIO m => FilePath -> m PartialConfig
instance GHC.Generics.Generic (Summoner.Config.ConfigP p)
instance (Generics.Deriving.Semigroup.GSemigroup (p Summoner.Config.:- Data.Text.Internal.Text), Generics.Deriving.Semigroup.GSemigroup (p Summoner.Config.:- Summoner.License.License), Generics.Deriving.Semigroup.GSemigroup (p Summoner.Config.:- [Summoner.ProjectData.GhcVer])) => Generics.Deriving.Semigroup.GSemigroup (Summoner.Config.ConfigP p)
instance (Generics.Deriving.Monoid.GMonoid (p Summoner.Config.:- Data.Text.Internal.Text), Generics.Deriving.Monoid.GMonoid (p Summoner.Config.:- Summoner.License.License), Generics.Deriving.Monoid.GMonoid (p Summoner.Config.:- [Summoner.ProjectData.GhcVer])) => Generics.Deriving.Monoid.GMonoid (Summoner.Config.ConfigP p)
instance GHC.Show.Show Summoner.Config.LoadTomlException
instance GHC.Exception.Exception Summoner.Config.LoadTomlException
instance GHC.Base.Semigroup Summoner.Config.PartialConfig
instance GHC.Base.Monoid Summoner.Config.PartialConfig


-- | This module introduces functional for project creation.
module Summoner.Project

-- | Generate the project.
generateProject :: Text -> Config -> IO ()


-- | This module contains functions and data types to parse CLI inputs.
module Summoner.CLI
summon :: IO ()

module Summoner
