From ca8d84fe5f80b2a2aebb7398508927585d8b0ae6 Mon Sep 17 00:00:00 2001 From: VegOwOtenks Date: Fri, 15 Aug 2025 13:07:38 +0200 Subject: [PATCH] feat[core]: datatypes in modules --- src/Language/Scalie/Core/Module.hs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Language/Scalie/Core/Module.hs b/src/Language/Scalie/Core/Module.hs index b344fa7..2516038 100644 --- a/src/Language/Scalie/Core/Module.hs +++ b/src/Language/Scalie/Core/Module.hs @@ -5,10 +5,16 @@ {-# LANGUAGE UndecidableInstances #-} -- instance head no smaller... module Language.Scalie.Core.Module (Module(..)) where +-- meta import Data.Kind (Type) -import Language.Scalie.Core.Definition (Definition) + +-- data types 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. -- -- >>> import Data.Functor.Identity (Identity(..)) @@ -29,9 +35,10 @@ import Data.Map.Implicit (ImplicitMap) type Module :: (Type -> Type) -> Type type role Module nominal -newtype Module f = Module +data Module f = Module { definitions :: f (ImplicitMap (Definition f)) + , datatypes :: f (ImplicitMap (AlgebraicDatatype f)) } -deriving stock instance (Show (f (ImplicitMap (Definition f)))) => Show (Module f) -deriving stock instance (Read (f (ImplicitMap (Definition f)))) => Read (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 (f (ImplicitMap (AlgebraicDatatype f)))) => Read (Module f)