axel-0.0.9: src/Axel/Haskell/Macros.hs
{-# LANGUAGE OverloadedStrings #-}
module Axel.Haskell.Macros where
import Axel
(applyInfix_AXEL_AUTOGENERATED_MACRO_DEFINITION,
def_AXEL_AUTOGENERATED_MACRO_DEFINITION)
import Axel.Haskell.Language
(haskellOperatorSymbols, haskellSyntaxSymbols, isOperator)
import qualified Axel.Parse as Parse (syntaxSymbols)
import Data.List (foldl')
import qualified Data.Text as T
(isSuffixOf, pack, replace, singleton, unpack)
hygenisizeMacroName oldName
= (let suffix
= if (isOperator oldName) then "%%%%%%%%%%" else
"_AXEL_AUTOGENERATED_MACRO_DEFINITION"
suffixedName
= if (T.isSuffixOf (T.pack suffix) (T.pack oldName)) then oldName
else ((<>) oldName suffix)
in
(T.unpack
(foldl'
(\ acc ((,) old new) ->
(T.replace (T.singleton old) (T.pack new) acc))
(T.pack suffixedName)
(filter (\ ((,) sym _) -> (notElem sym Parse.syntaxSymbols))
((<>) haskellSyntaxSymbols haskellOperatorSymbols)))))
where
hygenisizeMacroName :: ((->) String String)