module Script.Module (
    Module(..),
    ModuleName(..), textModuleName,
    moduleExportedDefinitions,
) where

import Script.Expr
import Test

data Module = Module
    { moduleName :: ModuleName
    , moduleTests :: [ Test ]
    , moduleDefinitions :: [ ( VarName, SomeExpr ) ]
    , moduleExports :: [ VarName ]
    }

moduleExportedDefinitions :: Module -> [ ( VarName, ( FqVarName, SomeExpr )) ]
moduleExportedDefinitions Module {..} =
    map (\( var, expr ) -> ( var, ( GlobalVarName moduleName var, expr ))) $
        filter ((`elem` moduleExports) . fst) moduleDefinitions