feat[core]: datatypes in modules

This commit is contained in:
vegowotenks 2025-08-15 13:07:38 +02:00
parent ebe94e2d9b
commit ca8d84fe5f

View file

@ -5,10 +5,16 @@
{-# LANGUAGE UndecidableInstances #-} -- instance head no smaller... {-# LANGUAGE UndecidableInstances #-} -- instance head no smaller...
module Language.Scalie.Core.Module (Module(..)) where module Language.Scalie.Core.Module (Module(..)) where
-- meta
import Data.Kind (Type) import Data.Kind (Type)
import Language.Scalie.Core.Definition (Definition)
-- data types
import Data.Map.Implicit (ImplicitMap) import Data.Map.Implicit (ImplicitMap)
-- scalie
import Language.Scalie.Core.Definition (Definition)
import safe Language.Scalie.Core.AlgebraicDatatype ( AlgebraicDatatype )
-- | A module groups multiple related variable definitions. -- | A module groups multiple related variable definitions.
-- --
-- >>> import Data.Functor.Identity (Identity(..)) -- >>> import Data.Functor.Identity (Identity(..))
@ -29,9 +35,10 @@ import Data.Map.Implicit (ImplicitMap)
type Module :: (Type -> Type) -> Type type Module :: (Type -> Type) -> Type
type role Module nominal type role Module nominal
newtype Module f = Module data Module f = Module
{ definitions :: f (ImplicitMap (Definition f)) { definitions :: f (ImplicitMap (Definition f))
, datatypes :: f (ImplicitMap (AlgebraicDatatype f))
} }
deriving stock instance (Show (f (ImplicitMap (Definition f)))) => Show (Module f) deriving stock instance (Show (f (ImplicitMap (Definition f))), Show (f (ImplicitMap (AlgebraicDatatype f)))) => Show (Module f)
deriving stock instance (Read (f (ImplicitMap (Definition f)))) => Read (Module f) deriving stock instance (Read (f (ImplicitMap (Definition f))), Read (f (ImplicitMap (AlgebraicDatatype f)))) => Read (Module f)