{-# 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) ] _ -> []