{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} module Compiler ( main ) where import Context (Contextual) import Data.Text (Text, cons) import qualified Data.Text as Text (concat) import Module (Module(..)) indent :: [Text] -> [Text] indent = fmap (cons '\t') include :: Bool -> Module -> Text include isMain (Module {imports, payload}) = Text.concat $ header isMain : indent payload ++ footer isMain where header True = "(function() {\n" header False = "modules[''] = (function() {\n" footer True = ["})());"] footer False = [ "})());" , "Object.freeze(modules['']);" ] scan :: Contextual () scan = undefined main :: Contextual Text main = undefined