Skip to content

refactor: Split up Primer.Core module #643

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 18, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions primer-rel8/test/TestUtils.hs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ import Primer.App (
defaultProg,
mkApp,
)
import Primer.Builtins (builtinModule)
import Primer.Core (
baseName,
mkSimpleModuleName,
Expand All @@ -63,8 +62,9 @@ import Primer.Module (
moduleName,
moduleTypes
),
builtinModule,
primitiveModule,
)
import Primer.Primitives (primitiveModule)
import Rel8 (
Expr,
Insert (Insert, into, onConflict, returning, rows),
Expand Down
4 changes: 2 additions & 2 deletions primer/gen/Primer/Gen/App.hs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ module Primer.Gen.App (
) where

import Primer.App (Prog (Prog, progImports, progLog, progModules, progSelection, progSmartHoles), defaultLog)
import Primer.Core (ASTDef (ASTDef), Def (DefAST), GlobalName (baseName), Kind (KType), ModuleName (ModuleName), qualifyName)
import Primer.Core (GlobalName (baseName), Kind (KType), ModuleName (ModuleName), qualifyName)
import Primer.Core.Utils (forgetTypeMetadata, generateIDs, generateTypeIDs)
import Primer.Def (ASTDef (ASTDef), Def (DefAST), defType)
import Primer.Module (Module (Module, moduleDefs, moduleName, moduleTypes), moduleDefsQualified, moduleTypesQualified)
import Primer.Name (Name, unsafeMkName)
import Primer.Primitives (defType)
import Primer.Typecheck (Cxt, SmartHoles, extendGlobalCxt, extendTypeDefCxt)

import Primer.Gen.Core.Typed (WT, freshNameForCxt, genChk, genTypeDefGroup, genWTType)
Expand Down
15 changes: 8 additions & 7 deletions primer/gen/Primer/Gen/Core/Typed.hs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ import Hedgehog.Gen qualified as Gen
import Hedgehog.Internal.Property (forAllT)
import Hedgehog.Range qualified as Range
import Primer.Core (
ASTTypeDef (..),
Bind' (Bind),
CaseBranch' (CaseBranch),
Expr' (..),
Expand All @@ -58,21 +57,23 @@ import Primer.Core (
TyConName,
TyVarName,
Type' (..),
TypeDef (..),
ValCon (..),
ValConName,
qualifyName,
typeDefKind,
typeDefParameters,
valConName,
valConType,
)
import Primer.Core.Utils (freeVarsTy)
import Primer.Gen.Core.Raw (genLVarName, genModuleName, genName, genTyVarName)
import Primer.Module (Module (..))
import Primer.Name (Name, NameCounter, freshName, unName, unsafeMkName)
import Primer.Refine (Inst (InstAPP, InstApp, InstUnconstrainedAPP), refine)
import Primer.Subst (substTy, substTys)
import Primer.TypeDef (
ASTTypeDef (..),
TypeDef (..),
ValCon (..),
typeDefKind,
typeDefParameters,
valConType,
)
import Primer.Typecheck (
Cxt (),
SmartHoles (NoSmartHoles),
Expand Down
3 changes: 3 additions & 0 deletions primer/primer.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ library
Primer.Core.Transform
Primer.Core.Utils
Primer.Database
Primer.Def
Primer.Def.Utils
Primer.Eval
Primer.EvalFull
Primer.Examples
Expand All @@ -42,6 +44,7 @@ library
Primer.Refine
Primer.Subst
Primer.Typecheck
Primer.TypeDef
Primer.Unification
Primer.Zipper
Primer.ZipperCxt
Expand Down
12 changes: 7 additions & 5 deletions primer/src/Primer/API.hs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,6 @@ import Primer.App (
)
import Primer.App qualified as App
import Primer.Core (
ASTDef (..),
Bind' (..),
CaseBranch' (..),
Expr,
Expand All @@ -107,13 +106,11 @@ import Primer.Core (
TyVarName,
Type,
Type' (..),
defAST,
moduleNamePretty,
unLocalName,
_typeMeta,
_typeMetaLens,
)
import Primer.Core qualified as Core
import Primer.Database (
OffsetLimit,
Page,
Expand Down Expand Up @@ -142,6 +139,11 @@ import Primer.Database qualified as Database (
Success
),
)
import Primer.Def (
ASTDef (..),
defAST,
)
import Primer.Def qualified as Def
import Primer.JSON (
CustomJSON (..),
PrimerJSON,
Expand Down Expand Up @@ -490,8 +492,8 @@ viewProg p =
, term = viewTreeExpr . astDefExpr <$> defAST d
, type_ =
case d of
Core.DefAST d' -> viewTreeType $ astDefType d'
Core.DefPrim d' -> viewTreeType' $ labelNodes $ primDefType d'
Def.DefAST d' -> viewTreeType $ astDefType d'
Def.DefPrim d' -> viewTreeType' $ labelNodes $ primDefType d'
where
labelNodes =
flip evalState (0 :: Int) . traverseOf _typeMeta \() -> do
Expand Down
14 changes: 6 additions & 8 deletions primer/src/Primer/Action.hs
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,6 @@ import Data.Set qualified as Set
import Data.Text qualified as T
import Optics (set, (%), (?~))
import Primer.Core (
ASTDef (..),
ASTTypeDef (..),
Def (..),
DefMap,
Expr,
Expr' (..),
GVarName,
Expand All @@ -50,17 +46,13 @@ import Primer.Core (
Type' (..),
TypeCache (..),
TypeCacheBoth (..),
TypeDef (..),
ValConName,
baseName,
bindName,
getID,
qualifiedModule,
unsafeMkGlobalName,
unsafeMkLocalName,
valConArgs,
valConName,
valConType,
)
import Primer.Core qualified as C
import Primer.Core.DSL (
Expand All @@ -86,6 +78,11 @@ import Primer.Core.DSL (
)
import Primer.Core.Transform (renameLocalVar, renameTyVar, renameTyVarExpr)
import Primer.Core.Utils (forgetTypeMetadata, generateTypeIDs)
import Primer.Def (
ASTDef (..),
Def (..),
DefMap,
)
import Primer.JSON
import Primer.Module (Module, insertDef)
import Primer.Name (Name, NameCounter, unName, unsafeMkName)
Expand All @@ -97,6 +94,7 @@ import Primer.Name.Fresh (
)
import Primer.Questions (Question, uniquify)
import Primer.Refine (Inst (InstAPP, InstApp, InstUnconstrainedAPP), refine)
import Primer.TypeDef (ASTTypeDef (..), TypeDef (..), ValCon (..), valConType)
import Primer.Typecheck (
CheckEverythingRequest (CheckEverything, toCheck, trusted),
SmartHoles,
Expand Down
8 changes: 5 additions & 3 deletions primer/src/Primer/Action/Available.hs
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,7 @@ import Primer.Action (
import Primer.Action.Priorities qualified as P
import Primer.App (globalInUse)
import Primer.Core (
ASTDef (..),
Bind' (..),
DefMap,
Expr,
Expr' (..),
ExprMeta,
Expand All @@ -48,7 +46,6 @@ import Primer.Core (
Type,
Type' (..),
TypeCache (..),
defAST,
getID,
_bindMeta,
_chkedAt,
Expand All @@ -60,6 +57,11 @@ import Primer.Core (
)
import Primer.Core.Transform (unfoldFun)
import Primer.Core.Utils (forgetTypeMetadata)
import Primer.Def (
ASTDef (..),
DefMap,
defAST,
)
import Primer.Name (unName)
import Primer.Questions (Question (..))
import Primer.Zipper (
Expand Down
28 changes: 16 additions & 12 deletions primer/src/Primer/App.hs
Original file line number Diff line number Diff line change
Expand Up @@ -99,15 +99,10 @@ import Primer.Action (
applyActionsToBody,
applyActionsToTypeSig,
)
import Primer.Builtins (builtinModule)
import Primer.Core (
ASTDef (..),
ASTTypeDef (..),
Bind' (Bind),
CaseBranch,
CaseBranch' (CaseBranch),
Def (..),
DefMap,
Expr,
Expr' (Case, Con, EmptyHole, Hole, Var),
ExprMeta,
Expand All @@ -122,17 +117,11 @@ import Primer.Core (
TyVarName,
Type,
Type' (..),
TypeDef (..),
TypeDefMap,
TypeMeta,
ValCon (..),
ValConName,
defAST,
defPrim,
getID,
mkSimpleModuleName,
qualifyName,
typeDefAST,
typesInExpr,
unModuleName,
unsafeMkGlobalName,
Expand All @@ -144,30 +133,45 @@ import Primer.Core.DSL (create, emptyHole, tEmptyHole)
import Primer.Core.DSL qualified as DSL
import Primer.Core.Transform (foldApp, renameVar, unfoldAPP, unfoldApp, unfoldTApp)
import Primer.Core.Utils (freeGlobalVars, freeVars, regenerateExprIDs, regenerateTypeIDs, _freeTmVars, _freeTyVars, _freeVarsTy)
import Primer.Def (
ASTDef (..),
Def (..),
DefMap,
defAST,
defPrim,
)
import Primer.Eval (EvalDetail, EvalError)
import Primer.Eval qualified as Eval
import Primer.EvalFull (Dir, EvalFullError (TimedOut), TerminationBound, evalFull)
import Primer.JSON
import Primer.Module (
Module (Module, moduleDefs, moduleName, moduleTypes),
builtinModule,
deleteDef,
insertDef,
moduleDefsQualified,
moduleTypesQualified,
nextModuleID,
primitiveModule,
qualifyDefName,
renameModule,
renameModule',
)
import Primer.Name (Name (unName), NameCounter, freshName, unsafeMkName)
import Primer.Primitives (primitiveModule)
import Primer.Questions (
Question (..),
generateNameExpr,
generateNameTy,
variablesInScopeExpr,
variablesInScopeTy,
)
import Primer.TypeDef (
ASTTypeDef (..),
TypeDef (..),
TypeDefMap,
ValCon (..),
typeDefAST,
)
import Primer.Typecheck (
CheckEverythingRequest (CheckEverything, toCheck, trusted),
Cxt,
Expand Down
33 changes: 3 additions & 30 deletions primer/src/Primer/Builtins.hs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
-- for the fact that some of the primitive functions (see "Primer.Primitives")
-- refer to these types.
module Primer.Builtins (
builtinModule,
tBool,
cTrue,
cFalse,
Expand All @@ -27,54 +26,28 @@ module Primer.Builtins (
cLeft,
cRight,
eitherDef,
builtinModuleName,
) where

import Foreword

import Data.Map qualified as Map
import Primer.Core (
ASTTypeDef (
ASTTypeDef,
astTypeDefConstructors,
astTypeDefNameHints,
astTypeDefParameters
),
GlobalName (baseName),
GlobalName,
Kind (KType),
ModuleName,
TyConName,
Type' (TApp, TCon, TVar),
TypeDef (TypeDefAST),
ValCon (ValCon),
ValConName,
mkSimpleModuleName,
qualifyName,
)
import Primer.Module (Module (Module, moduleDefs, moduleName, moduleTypes))
import Primer.Name (Name)
import Primer.TypeDef (ASTTypeDef (..), ValCon (ValCon))

builtinModuleName :: ModuleName
builtinModuleName = mkSimpleModuleName "Builtins"

builtin :: Name -> GlobalName k
builtin = qualifyName builtinModuleName

builtinModule :: Module
builtinModule =
Module
{ moduleName = builtinModuleName
, moduleTypes =
Map.fromList
[ (baseName tBool, TypeDefAST boolDef)
, (baseName tNat, TypeDefAST natDef)
, (baseName tList, TypeDefAST listDef)
, (baseName tMaybe, TypeDefAST maybeDef)
, (baseName tPair, TypeDefAST pairDef)
, (baseName tEither, TypeDefAST eitherDef)
]
, moduleDefs = mempty
}

tBool :: TyConName
tBool = builtin "Bool"
cTrue, cFalse :: ValConName
Expand Down
Loading