tests
[clean-tests.git] / uds / ASDS.dcl
index fd82537..a6cf0ea 100644 (file)
@@ -12,28 +12,30 @@ import ASDS.Lens
 
 :: PViewT m a :== StateT [NRequest m] m a
 :: NRequest m = NRequest String (m ()) Dynamic
+//* @type :: String (m ()) p [NRequest] -> [NRequest] | TC p
+nrequestc p id hnd s :== [NRequest id hnd (dynamic p):s]
+
+//* Used to force kinds of variables in a
+:: KindHelper a b :== b
 
 //* Read a share with one rewrite step
 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) | Monad m
+class write v :: (v m p r w) p w -> PViewT m (WriteResult m p r w) | Monad m & TC p
+//* Generate a unique name
+class identity v :: (v m p r w) (KindHelper (m ()) [String]) -> [String]
 //* 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
+class observe v :: (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
-       = Read r //* done reading
+       = Read (KindHelper (m ()) r) //* done reading
        | E.sds: Reading (sds m p r w) & read sds //* not done reading
-       | ReadResultUnused (m ())
 
 //* Result of a single write rewrite
 :: WriteResult m p r w
-       = Written () //* done writing
+       = Written (KindHelper (m ()) ()) //* done writing
        | E.sds: Writing (sds m p r w) & write sds //* not done writing
-       | WriteResultUnused (m ())
 
 //* Read lens, it can choose to ignore the source
 :: LensRead m p r rs
@@ -46,11 +48,12 @@ where
        | 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, write, observe sds
-sds :: (sds m p r w) -> SDS m p r w | read, write, observe sds & Monad m
+:: SDS m p r w = E.sds: SDS (KindHelper (m ()) (sds m p r w)) & read, write, identity, observe sds
+sds :: (sds m p r w) -> SDS m p r w | read, write, identity, observe sds & Monad m
 
 instance read SDS
 instance write SDS
+instance identity SDS
 instance observe SDS
 
 //* Read a share completely
@@ -61,3 +64,6 @@ setShare :: w (sds m () r w) -> PViewT m () | Monad m & write sds & TC r & TC w
 
 //* Update a share completely
 updShare :: (r -> w) (sds m () r w) -> PViewT m w | Monad m & read sds & write sds & TC r & TC w
+
+//* Trigger observing tasks
+trigger :: (v m p r w) (p -> Bool) -> PViewT m () | identity v & TC p & Monad m