module Hscaffold.Interpreter.Hsfiles where
import Control.Monad.Writer
import Data.Text (Text)
import qualified Data.Text as Text
import qualified Data.Text.IO as Text
import Hscaffold.Interpreter.Common
import Hscaffold.Types
toHsfiles :: Writer ScaffoldActionV a -> Text
toHsfiles w = let (_, ws) = runWriter w
in
Text.stripEnd $
Text.unlines $
concatMap (actionToHsfile ".") ws
actionToHsfile :: FilePath -> ScaffoldActionType e -> [Text]
actionToHsfile root a = case a of
(File fp txt) -> [ "{-# START_FILE " <> Text.pack (mkActionPath root fp) <>
" #-}"
] <>
Text.lines txt
(Directory fp nested) ->
concatMap (actionToHsfile (mkActionPath root fp)) nested
_ -> []
writeToHsfiles :: MonadIO m => FilePath -> Writer ScaffoldActionV a -> m ()
writeToHsfiles fp w = do
let h = toHsfiles w
liftIO $ Text.writeFile fp h