packages feed

g2-0.1.0.0: src/G2/Translation/TransTypes.hs

module G2.Translation.TransTypes where

import CoreSyn
-- import GHC
import HscTypes
import InstEnv
import TyCon

import qualified Data.HashMap.Lazy as HM
import qualified Data.Text as T

import qualified G2.Language.Syntax as G2
import qualified G2.Language.AlgDataTy as G2

type NameMap = HM.HashMap (T.Text, Maybe T.Text) G2.Name

type TypeNameMap = HM.HashMap (T.Text, Maybe T.Text) G2.Name

type ExportedName = G2.Name

data TranslationConfig = TranslationConfig
  {
    simpl :: Bool
  , load_rewrite_rules :: Bool
  }

simplTranslationConfig :: TranslationConfig
simplTranslationConfig = TranslationConfig { simpl = True, load_rewrite_rules = False }

data ModGutsClosure = ModGutsClosure
  { mgcc_mod_name :: Maybe String
  , mgcc_binds :: [CoreBind]
  , mgcc_tycons :: [TyCon]
  , mgcc_breaks :: Maybe ModBreaks
  , mgcc_cls_insts :: [ClsInst]
  , mgcc_type_env :: TypeEnv
  , mgcc_exports :: [ExportedName]
  , mgcc_deps :: [String]
  , mgcc_rules :: [CoreRule]
  }


data ModDetailsClosure = ModDetailsClosure
  { mdcc_cls_insts :: [ClsInst]
  , mdcc_type_env :: TypeEnv
  , mdcc_exports :: [ExportedName]
  , mdcc_deps :: [String]
  }

data CgGutsClosure = CgGutsClosure
  { cgcc_mod_name :: Maybe String
  , cgcc_binds :: [CoreBind]
  , cgcc_breaks :: Maybe ModBreaks
  , cgcc_tycons :: [TyCon]
  , cgcc_rules :: [CoreRule]
  }


emptyModGutsClosure :: ModGutsClosure
emptyModGutsClosure =
  ModGutsClosure
    { mgcc_mod_name = Nothing
    , mgcc_binds = []
    , mgcc_tycons = []
    , mgcc_breaks = Nothing
    , mgcc_cls_insts = []
    , mgcc_type_env = emptyTypeEnv
    , mgcc_exports = []
    , mgcc_deps = []
    , mgcc_rules = []
    }

emptyModDetailsClosure :: ModDetailsClosure
emptyModDetailsClosure =
  ModDetailsClosure
    { mdcc_cls_insts = []
    , mdcc_type_env = emptyTypeEnv
    , mdcc_exports = []
    , mdcc_deps = []
    }

emptyCgGutsClosure :: CgGutsClosure
emptyCgGutsClosure =
  CgGutsClosure
    { cgcc_mod_name = Nothing
    , cgcc_binds = []
    , cgcc_breaks = Nothing
    , cgcc_tycons = []
    , cgcc_rules = []
    }


data ExtractedG2 = ExtractedG2
  { exg2_mod_names :: [T.Text]
  , exg2_binds :: [(G2.Id, G2.Expr)]
  , exg2_tycons :: [G2.ProgramType]
  , exg2_classes :: [(G2.Name, G2.Id, [G2.Id])]
  , exg2_exports :: [ExportedName]
  , exg2_deps :: [T.Text]
  , exg2_rules :: ![G2.RewriteRule]
  } deriving (Eq, Show, Read)

emptyExtractedG2 :: ExtractedG2
emptyExtractedG2 =
  ExtractedG2
    { exg2_mod_names = []
    , exg2_binds = []
    , exg2_tycons = []
    , exg2_classes = []
    , exg2_exports = []
    , exg2_deps = []
    , exg2_rules = [] }