34 lines
1.2 KiB
Haskell
34 lines
1.2 KiB
Haskell
module Functions.Template
|
|
( Template(..)
|
|
, makeTemplate
|
|
, applyTemplate
|
|
) where
|
|
|
|
import Types (IsFunction(..), Token)
|
|
import DependencyGenerator (DepGenM, TokenableTo(..), toTupleToken, runFunction)
|
|
|
|
import Data.Text (Text)
|
|
import qualified Data.Text as T
|
|
|
|
data Template = TemplateParts Text Text
|
|
deriving (Eq, Show)
|
|
|
|
data MakeTemplate = MakeTemplate deriving Show
|
|
instance IsFunction MakeTemplate (Text, Text) Template where
|
|
evalFunction MakeTemplate (t, c) =
|
|
let (beforeContent, after) = T.breakOn c t
|
|
afterContent = T.drop (T.length c) after
|
|
in TemplateParts beforeContent afterContent
|
|
|
|
makeTemplate :: (TokenableTo Text a, TokenableTo Text b) => a -> b -> DepGenM (Token Template)
|
|
makeTemplate a b = runFunction MakeTemplate =<< toTupleToken a b
|
|
|
|
|
|
data ApplyTemplate = ApplyTemplate deriving Show
|
|
instance IsFunction ApplyTemplate (Template, Text) Text where
|
|
evalFunction ApplyTemplate (TemplateParts beforeContent afterContent, t) =
|
|
T.concat [beforeContent, t, afterContent]
|
|
|
|
applyTemplate :: (TokenableTo Template a, TokenableTo Text b) => a -> b -> DepGenM (Token Text)
|
|
applyTemplate a b = runFunction ApplyTemplate =<< toTupleToken a b
|