From c558b300a3353edf7c88a2c363cb6bc7b7c1dcb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 21 Sep 2025 22:49:21 +0200 Subject: Require result of TestBlock to be ExprType instance --- src/Script/Expr/Class.hs | 4 ++++ src/Script/Object.hs | 11 +++++++++++ 2 files changed, 15 insertions(+) (limited to 'src/Script') diff --git a/src/Script/Expr/Class.hs b/src/Script/Expr/Class.hs index 20a92b4..005b6a8 100644 --- a/src/Script/Expr/Class.hs +++ b/src/Script/Expr/Class.hs @@ -39,6 +39,10 @@ data ExprListUnpacker a = forall e. ExprType e => ExprListUnpacker (a -> [e]) (P data ExprEnumerator a = ExprEnumerator (a -> a -> [a]) (a -> a -> a -> [a]) +instance ExprType () where + textExprType _ = "Unit" + textExprValue () = "()" + instance ExprType Integer where textExprType _ = T.pack "integer" textExprValue x = T.pack (show x) diff --git a/src/Script/Object.hs b/src/Script/Object.hs index 9232b21..7e60f80 100644 --- a/src/Script/Object.hs +++ b/src/Script/Object.hs @@ -7,8 +7,11 @@ module Script.Object ( ) where import Data.Kind +import Data.Text (Text) import Data.Typeable +import Script.Expr.Class + newtype ObjectId = ObjectId Int @@ -16,9 +19,17 @@ class Typeable a => ObjectType m a where type ConstructorArgs a :: Type type ConstructorArgs a = () + textObjectType :: proxy (m a) -> proxy a -> Text + textObjectValue :: proxy (m a) -> a -> Text + createObject :: ObjectId -> ConstructorArgs a -> m (Object m a) destroyObject :: Object m a -> m () +instance (Typeable m, ObjectType m a) => ExprType (Object m a) where + textExprType _ = textObjectType (Proxy @(m a)) (Proxy @a) + textExprValue = textObjectValue (Proxy @(m a)) . objImpl + + data Object m a = ObjectType m a => Object { objId :: ObjectId , objImpl :: a -- cgit v1.2.3