import ASDS.Select
import ASDS.Parallel
-sds :: (sds m p r w) -> SDS m p r w | read sds & write sds & Monad m
+sds :: (sds m p r w) -> SDS m p r w | read, write, observe sds & Monad m
sds s = SDS s (pure ())
instance read SDS where read (SDS s _) p = read s p
instance write SDS where write (SDS sds _) p w = write sds p w
+instance observe SDS
+where
+ identity (SDS sds _) c = identity sds c
+ observe (SDS sds _) p oid handle = observe sds p oid handle
getShare :: (sds m () r w) -> PViewT m r | Monad m & read sds & TC r & TC w
getShare s = read s () >>= \v->case v of