{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE OverloadedStrings #-}
module Templates where
import Data.Monoid ((<>))
import qualified Data.Text as T
import Lens.Family
import Types
cabalHeader :: ProjectDetails -> T.Text
cabalHeader pr = T.unlines
[ "name: " <> pr^.projectName
, "version: 0.1.0.0"
, case pr^.projectSynopsis of
Just s -> "synopsis: " <> s
Nothing -> "-- synopsis:"
, case pr^.projectDescription of
Just s -> "description: " <> s
Nothing -> "-- description:"
, case pr^.projectLicense of
Nothing -> "license: BSD3"
Just l -> "license: " <> l
, "author: " <> pr^.projectAuthor <> " <" <> pr^.projectEmail <> ">"
, "maintainer: " <> pr^.projectAuthor <> " <" <> pr^.projectEmail <> ">"
, "copyright: @" <> pr^.projectYear <> " " <> pr^.projectAuthor
, case pr^.projectCategory of
Just c -> "category: " <> c
Nothing -> "-- category:"
, "build-type: Simple"
, "cabal-version: >=1.14"
]
cabalLibrary :: LibraryDetails -> T.Text
cabalLibrary lib = T.unlines $
[ "library"
, " hs-source-dirs: src"
, " ghc-options: -Wall"
, " build-depends: base >=4.7 && <5"
, " default-language: Haskell2010"
, " default-extensions: ScopedTypeVariables"
] <> mods
where
mods = case lib^.libMods of
[] -> []
(x:xs) ->
(" exposed-modules: " <> x) :
[" , " <> m | m <- xs ]
cabalExecutable :: ExecutableDetails -> T.Text
cabalExecutable exe = T.unlines $
[ "executable " <> exe^.execName
, " hs-source-dirs: " <> exe^.execDir
, " main-is: Main.hs"
, " default-language: Haskell2010"
, " default-extensions: ScopedTypeVariables"
, " ghc-options: -Wall"
] <> deps
where
baseDep = " build-depends: base >=4.7 && <5"
deps =
baseDep : [ " , " <> m
| m <- exe^.execDeps
]
defaultBin :: T.Text
defaultBin = T.unlines $
[ "module Main where"
, ""
, "main :: IO ()"
, "main = return ()"
]
defaultLib :: T.Text -> T.Text
defaultLib mod = T.unlines $
[ "module " <> mod
, "("
, ") where"
]
defaultTest :: T.Text -> T.Text
defaultTest mod = T.unlines $
[ "module " <> mod <> "(main) where" ]
defaultGitignore :: T.Text
defaultGitignore = T.unlines
[ "dist"
, "dist-*"
, "*~"
, "cabal-dev"
, "*.o"
, "*.hi"
, "*.chi"
, "*.chs.h"
, "*.dyn_o"
, "*.dyn_hi"
, ".hpc"
, ".hsenv"
, ".cabal-sandbox/"
, "cabal.sandbox.config"
, "*.prof"
, "*.aux"
, "*.hp"
, "*.eventlog"
, "cabal.project.local"
, ".ghc.environment.*"
]