module Development.Shake.ATS.Generate ( generateLinks
                                      ) where

import           Control.Lens
import           Data.Semigroup
import           Language.ATS

generateLinks :: String -> Either (ATSError String) String
generateLinks = fmap (printATS . generateLinks') . parse

generateLinks' :: ATS -> ATS
generateLinks' (ATS ds) = ATS (fmap g ds <> [macDecl])
    where g f@Func{} = Extern undefined (set (fun.preF.expression) expr f)
          g x        = x
          expr = Just (StringLit "\"mac#\"")
          macDecl = Define "#define ATS_MAINATSFLAG 1"