+module test
+
+import Data.Func
+import iTasks.Extensions.DateTime
+import qualified Data.Map as DM
+import qualified Data.Set as DS
+import iTasks
+
+//:: SDSStamped sds p r w = SDSStamped String (sds p (DateTime, r) (DateTime, w))
+//instance Identifiable (SDSStamped sds) | Identifiable sds
+//where
+// nameSDS (SDSStamped n sds) acc = ["t$":nameSDS sds ["$t":acc]]
+//instance Readable (SDSStamped sds) | Readable sds
+//where
+// readSDS (SDSStamped name sds) p c iworld
+// = case readSDS sds p c iworld of
+// (Error e, iworld) = (Error e, iworld)
+// (Ok (ReadResult r ssds), iworld)
+// = (Ok (ReadResult r (SDSStamped name ssds)), iworld)
+// (Ok (AsyncRead sds), iworld)
+// = (Ok (AsyncRead (SDSStamped name sds)), iworld)
+//
+
+:: SDSNoNotify p r w = E.sds: SDSNoNotify (sds p r w) & RWShared sds
+instance Identifiable SDSNoNotify where
+ nameSDS (SDSNoNotify sds) c = nameSDS sds c
+instance Readable SDSNoNotify where
+ readSDS (SDSNoNotify sds) p c iworld
+ = case readSDS sds p c iworld of
+ (Error e, iworld) = (Error e, iworld)
+ (Ok (ReadResult r sds), iworld)
+ = (Ok (ReadResult r sds), iworld)
+ (Ok (AsyncRead sds), iworld)
+ = (Ok (AsyncRead sds), iworld)
+
+instance Writeable SDSNoNotify where
+ writeSDS (SDSNoNotify sds) p c w iworld
+ = case writeSDS sds p c w iworld of
+ (Error e, iworld) = (Error e, iworld)
+ (Ok (WriteResult _ sds), iworld)
+ = (Ok (WriteResult 'DS'.newSet (SDSNoNotify sds)), iworld)
+ (Ok (AsyncWrite sds), iworld)
+ = (Ok (AsyncWrite (SDSNoNotify sds)), iworld)
+instance Registrable SDSNoNotify where
+ readRegisterSDS (SDSNoNotify sds) p c _ _ iworld
+ = case readSDS sds p c iworld of
+ (Error e, iworld) = (Error e, iworld)
+ (Ok (ReadResult r sds), iworld)
+ = (Ok (ReadResult r sds), iworld)
+ (Ok (AsyncRead sds), iworld)
+ = (Ok (AsyncRead sds), iworld)
+instance Modifiable SDSNoNotify where
+ modifySDS mf (SDSNoNotify sds) p c iworld
+ = case modifySDS mf sds p c iworld of
+ (Error e, iworld) = (Error e, iworld)
+ (Ok (ModifyResult _ r w sds), iworld)
+ = (Ok (ModifyResult 'DS'.newSet r w (SDSNoNotify sds)), iworld)
+ (Ok (AsyncModify sds mf), iworld)
+ = (Ok (AsyncModify (SDSNoNotify sds) mf), iworld)
+
+
+sh = sharedStore "bork" ({DateTime|year=0,mon=0,day=0,hour=0,min=0,sec=0}, 42)
+
+Start w = doTasks t w
+//Start w = nameSDS (SDSStamped "bork" sh) []
+
+stampedShare :: (Shared sds (DateTime, a)) -> SDSLens () (DateTime, a) a | TC a & RWShared sds
+stampedShare sds =
+ mapReadWrite (fst , \a (_, dt)->Just ((dt, a), dt)) Nothing
+ $ sds >*< (mapWrite (\_ _->Nothing) Nothing currentDateTime)
+
+t = viewSharedInformation [] sh
+ -&&- updateSharedInformation [] (stampedShare sh)