diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-09-21 22:49:21 +0200 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-09-21 22:49:21 +0200 |
commit | c558b300a3353edf7c88a2c363cb6bc7b7c1dcb7 (patch) | |
tree | f8a21828219592a2a23289be74c7faaa95f8e3d0 /src/Script/Object.hs | |
parent | 442bc3df9692edde632e3a1d7217e861bf85fd81 (diff) |
Diffstat (limited to 'src/Script/Object.hs')
-rw-r--r-- | src/Script/Object.hs | 11 |
1 files changed, 11 insertions, 0 deletions
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 |