From 14104da1250f81daac31b6fffc0d1a37a90dc140 Mon Sep 17 00:00:00 2001 From: VegOwOtenks Date: Tue, 12 Aug 2025 14:51:40 +0200 Subject: [PATCH] feat: Read and show for Language.Scalie.Ast.Module --- src/Language/Scalie/Ast/Module.hs | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/Language/Scalie/Ast/Module.hs b/src/Language/Scalie/Ast/Module.hs index f90f9d1..8d127aa 100644 --- a/src/Language/Scalie/Ast/Module.hs +++ b/src/Language/Scalie/Ast/Module.hs @@ -8,20 +8,32 @@ module Language.Scalie.Ast.Module (Module(..)) where import Data.Kind (Type) import Language.Scalie.Ast.Definition (Definition) import Data.Map.Implicit (ImplicitMap) -import Text.Show ( Show ) +import Text.Show (Show) import Text.Read (Read) -import Data.Text (Text) -import Language.Scalie.Ast.Expression (Expression) -import Language.Scalie.Domain.Type qualified as Scalie.Domain -import Data.Ord (Ord) -- | A module groups multiple related definitions. +-- +-- >>> import Data.Functor.Identity (Identity(..)) +-- >>> import Data.Map.Implicit qualified as ImplicitMap +-- >>> Module (Identity ImplicitMap.empty) +-- Module {definitions = Identity ImplicitMapElems []} +-- +-- >>> import Data.Maybe (Maybe(..)) +-- >>> Module Nothing +-- Module {definitions = Nothing} +-- +-- >>> import Text.Read (readMaybe) +-- >>> readMaybe "Module { definitions = Just (ImplicitMapElems []) }" :: Maybe (Module Maybe) +-- Just (Module {definitions = Just ImplicitMapElems []}) +-- +-- >>> readMaybe "Module { definitions = Just (ImplicitMapElems [Definition { signature = Nothing, name = Just \"x\", body = Nothing } ]) }" :: Maybe (Module Maybe) +-- Just (Module {definitions = Just ImplicitMapElems [Definition {signature = Nothing, name = Just "x", body = Nothing}]}) type Module :: (Type -> Type) -> Type type role Module nominal data Module f = Module - { definitions :: ImplicitMap (Definition f) + { definitions :: f (ImplicitMap (Definition f)) } -deriving stock instance (Show (f Text), Show (f Expression), Show (f Scalie.Domain.Type)) => Show (Module f) -deriving stock instance (Read (f Text), Ord (f Text), Read (f Expression), Read (f Scalie.Domain.Type)) => Read (Module f) +deriving stock instance (Show (f (ImplicitMap (Definition f)))) => Show (Module f) +deriving stock instance (Read (f (ImplicitMap (Definition f)))) => Read (Module f)