jord-1.0.0.0: gen/Generator.hs
module Generator
( Header(..)
, Generator(..)
, generate
, documentation
) where
data Header =
Header
{ comment :: [String]
, module' :: String
}
data Generator a =
Generator [String] (a -> String) ([a] -> String)
generate :: Header -> Generator a -> [a] -> String
generate h (Generator imports genElt genAll) elts =
header h ++
"module " ++
module' h ++
" where\n\n" ++
unlines (map (\i -> "import " ++ i) imports) ++ "\n" ++ unlines (map (\e -> genElt e ++ "\n") elts) ++ genAll elts
header :: Header -> String
header h =
"-- | \n\
\-- Module: " ++
module' h ++
" \n" ++
"-- Copyright: (c) 2020 Cedric Liegeois \n\
\-- License: BSD3 \n\
\-- Maintainer: Cedric Liegeois <ofmooseandmen@yahoo.fr> \n\
\-- Stability: experimental \n\
\-- Portability: portable \n\
\--\n" ++
genComment (comment h) ++
"--\n\
\-- This module has been generated.\n\
\--\n"
documentation :: [String] -> String
documentation [] = ""
documentation (c:cs) = ("-- |" ++ c ++ "\n") ++ (genComment cs)
genComment :: [String] -> String
genComment cs = unlines (map (\s -> "--" ++ s) cs)