packages feed

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