gengeng
[clean-tests.git] / uds / ASDS.dcl
index f8ea837..fd82537 100644 (file)
@@ -14,9 +14,14 @@ import ASDS.Lens
 :: NRequest m = NRequest String (m ()) Dynamic
 
 //* Read a share with one rewrite step
-class read v :: (v m p r w) p -> PViewT m (ReadResult m p r w) | TC r & Monad m
+class read v :: (v m p r w) p -> PViewT m (ReadResult m p r w) | Monad m
 //* Write a share with one rewrite step
-class write v :: (v m p r w) p w -> PViewT m (WriteResult m p r w) | TC w & Monad m
+class write v :: (v m p r w) p w -> PViewT m (WriteResult m p r w) | Monad m
+//* Observe a share and get notified when it happens
+class observe v
+where
+       identity :: (v m p r w) [String] -> [String]
+       observe :: (v m p r w) p String (m ()) -> PViewT m () | Monad m & TC p
 
 //* Result of a single read rewrite
 :: ReadResult m p r w
@@ -41,11 +46,12 @@ class write v :: (v m p r w) p w -> PViewT m (WriteResult m p r w) | TC w & Mona
        | LensWriteConst (p w -> m (? ws))
 
 //* Box type, to get rid of a possible complex constructor of combinators
-:: SDS m p r w = E.sds: SDS (sds m p r w) (m ()) /*force kind*/ & read sds & write sds
-sds :: (sds m p r w) -> SDS m p r w | read sds & write sds & Monad m
+:: SDS m p r w = E.sds: SDS (sds m p r w) (m ()) /*force kind*/ & read, write, observe sds
+sds :: (sds m p r w) -> SDS m p r w | read, write, observe sds & Monad m
 
 instance read SDS
 instance write SDS
+instance observe SDS
 
 //* Read a share completely
 getShare :: (sds m () r w) -> PViewT m r | Monad m & read sds & TC r & TC w