feat: Read and show for Language.Scalie.Ast.Module

This commit is contained in:
vegowotenks 2025-08-12 14:51:40 +02:00
parent 9336a88cb9
commit 14104da125

View file

@ -10,18 +10,30 @@ import Language.Scalie.Ast.Definition (Definition)
import Data.Map.Implicit (ImplicitMap) import Data.Map.Implicit (ImplicitMap)
import Text.Show (Show) import Text.Show (Show)
import Text.Read (Read) 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. -- | 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 Module :: (Type -> Type) -> Type
type role Module nominal type role Module nominal
data Module f = Module 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 (Show (f (ImplicitMap (Definition f)))) => 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 (Read (f (ImplicitMap (Definition f)))) => Read (Module f)