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)