hscaffold-0.4.0.0: src/Hscaffold/Interpreter/Haskell.hs
{-# LANGUAGE OverloadedStrings #-}
module Hscaffold.Interpreter.Haskell
where
import Control.Monad.Writer
import Data.Text (Text)
import qualified Data.Text as Text
import Hscaffold.Types
-- | Generates Haskell code from scaffold actions
hscaffoldToHaskell :: Foldable t => t (ScaffoldActionType e) -> Text
hscaffoldToHaskell hs = Text.stripEnd $
Text.unlines $
concatMap hscaffoldActionToHaskell hs
hscaffoldActionToHaskell :: ScaffoldActionType e -> [Text]
hscaffoldActionToHaskell h = case h of
(File fp txt) ->
[ "file " <> Text.pack (show fp <> " " <> show txt) ]
(Directory fp nested) ->
let nestedCode = concatMap hscaffoldActionToHaskell nested
inestedCode = map (" " <>) nestedCode
in [ "directory " <> Text.pack (show fp) <> " $ do"
] <> inestedCode
(Link fp1 fp2) ->
[ "link " <> Text.pack (show fp1) <> " "
<> Text.pack (show fp2)
]
(SetPermissions p fp) ->
[ "permissions " <> Text.pack (show fp)
<> " (" <> Text.pack (show p) <> ")"
]
(Copy fp1 fp2) ->
[ "copy " <> Text.pack (show fp1)
<> " " <> Text.pack (show fp2)
]
_ -> []