{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DerivingStrategies #-} module Inferno.Types.Module where import Data.Aeson (FromJSON, ToJSON) import qualified Data.Map as Map import qualified Data.Set as Set import GHC.Generics (Generic) import Inferno.Types.Syntax (Expr, ModuleName, OpsTable) import Inferno.Types.Type (Namespace, TCScheme, TypeClass, TypeMetadata) import Inferno.Types.VersionControl (VCHashUpdate, VCObjectHash) data Module objs = Module { forall objs. Module objs -> ModuleName moduleName :: ModuleName, forall objs. Module objs -> OpsTable moduleOpsTable :: OpsTable, forall objs. Module objs -> Set TypeClass moduleTypeClasses :: Set.Set TypeClass, forall objs. Module objs -> objs moduleObjects :: objs } deriving (Module objs -> Module objs -> Bool forall objs. Eq objs => Module objs -> Module objs -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Module objs -> Module objs -> Bool $c/= :: forall objs. Eq objs => Module objs -> Module objs -> Bool == :: Module objs -> Module objs -> Bool $c== :: forall objs. Eq objs => Module objs -> Module objs -> Bool Eq, forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall objs x. Rep (Module objs) x -> Module objs forall objs x. Module objs -> Rep (Module objs) x $cto :: forall objs x. Rep (Module objs) x -> Module objs $cfrom :: forall objs x. Module objs -> Rep (Module objs) x Generic) deriving anyclass (forall objs. VCHashUpdate objs => Context SHA256 -> Module objs -> Context SHA256 forall obj. (Context SHA256 -> obj -> Context SHA256) -> VCHashUpdate obj &< :: Context SHA256 -> Module objs -> Context SHA256 $c&< :: forall objs. VCHashUpdate objs => Context SHA256 -> Module objs -> Context SHA256 VCHashUpdate, forall objs. ToJSON objs => [Module objs] -> Encoding forall objs. ToJSON objs => [Module objs] -> Value forall objs. ToJSON objs => Module objs -> Encoding forall objs. ToJSON objs => Module objs -> Value forall a. (a -> Value) -> (a -> Encoding) -> ([a] -> Value) -> ([a] -> Encoding) -> ToJSON a toEncodingList :: [Module objs] -> Encoding $ctoEncodingList :: forall objs. ToJSON objs => [Module objs] -> Encoding toJSONList :: [Module objs] -> Value $ctoJSONList :: forall objs. ToJSON objs => [Module objs] -> Value toEncoding :: Module objs -> Encoding $ctoEncoding :: forall objs. ToJSON objs => Module objs -> Encoding toJSON :: Module objs -> Value $ctoJSON :: forall objs. ToJSON objs => Module objs -> Value ToJSON, forall objs. FromJSON objs => Value -> Parser [Module objs] forall objs. FromJSON objs => Value -> Parser (Module objs) forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a parseJSONList :: Value -> Parser [Module objs] $cparseJSONList :: forall objs. FromJSON objs => Value -> Parser [Module objs] parseJSON :: Value -> Parser (Module objs) $cparseJSON :: forall objs. FromJSON objs => Value -> Parser (Module objs) FromJSON) newtype BuiltinModuleHash = BuiltinModuleHash ModuleName deriving stock (forall x. Rep BuiltinModuleHash x -> BuiltinModuleHash forall x. BuiltinModuleHash -> Rep BuiltinModuleHash x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep BuiltinModuleHash x -> BuiltinModuleHash $cfrom :: forall x. BuiltinModuleHash -> Rep BuiltinModuleHash x Generic) deriving anyclass (Context SHA256 -> BuiltinModuleHash -> Context SHA256 forall obj. (Context SHA256 -> obj -> Context SHA256) -> VCHashUpdate obj &< :: Context SHA256 -> BuiltinModuleHash -> Context SHA256 $c&< :: Context SHA256 -> BuiltinModuleHash -> Context SHA256 VCHashUpdate) newtype BuiltinFunHash = BuiltinFunHash (Expr () (), TCScheme) deriving stock (forall x. Rep BuiltinFunHash x -> BuiltinFunHash forall x. BuiltinFunHash -> Rep BuiltinFunHash x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep BuiltinFunHash x -> BuiltinFunHash $cfrom :: forall x. BuiltinFunHash -> Rep BuiltinFunHash x Generic) deriving anyclass (Context SHA256 -> BuiltinFunHash -> Context SHA256 forall obj. (Context SHA256 -> obj -> Context SHA256) -> VCHashUpdate obj &< :: Context SHA256 -> BuiltinFunHash -> Context SHA256 $c&< :: Context SHA256 -> BuiltinFunHash -> Context SHA256 VCHashUpdate) newtype BuiltinEnumHash = BuiltinEnumHash TCScheme deriving stock (forall x. Rep BuiltinEnumHash x -> BuiltinEnumHash forall x. BuiltinEnumHash -> Rep BuiltinEnumHash x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep BuiltinEnumHash x -> BuiltinEnumHash $cfrom :: forall x. BuiltinEnumHash -> Rep BuiltinEnumHash x Generic) deriving anyclass (Context SHA256 -> BuiltinEnumHash -> Context SHA256 forall obj. (Context SHA256 -> obj -> Context SHA256) -> VCHashUpdate obj &< :: Context SHA256 -> BuiltinEnumHash -> Context SHA256 $c&< :: Context SHA256 -> BuiltinEnumHash -> Context SHA256 VCHashUpdate) type PinnedModule m = Module (Map.Map Namespace VCObjectHash, Map.Map VCObjectHash (TypeMetadata TCScheme), m) pinnedModuleNameToHash :: PinnedModule m -> Map.Map Namespace VCObjectHash pinnedModuleNameToHash :: forall m. PinnedModule m -> Map Namespace VCObjectHash pinnedModuleNameToHash Module {moduleObjects :: forall objs. Module objs -> objs moduleObjects = (Map Namespace VCObjectHash hashes, Map VCObjectHash (TypeMetadata TCScheme) _, m _)} = Map Namespace VCObjectHash hashes pinnedModuleHashToTy :: PinnedModule m -> Map.Map VCObjectHash (TypeMetadata TCScheme) pinnedModuleHashToTy :: forall m. PinnedModule m -> Map VCObjectHash (TypeMetadata TCScheme) pinnedModuleHashToTy Module {moduleObjects :: forall objs. Module objs -> objs moduleObjects = (Map Namespace VCObjectHash _, Map VCObjectHash (TypeMetadata TCScheme) tys, m _)} = Map VCObjectHash (TypeMetadata TCScheme) tys pinnedModuleTerms :: PinnedModule m -> m pinnedModuleTerms :: forall m. PinnedModule m -> m pinnedModuleTerms Module {moduleObjects :: forall objs. Module objs -> objs moduleObjects = (Map Namespace VCObjectHash _, Map VCObjectHash (TypeMetadata TCScheme) _, m trms)} = m trms