1 implementation module ASDS.Source
8 rwpair :: (sdsr m p r w) (sdsw m p r w) -> RWPair sdsr sdsw m p r w | pure m
9 rwpair l r = RWPair l r (pure ())
11 source :: (p -> m r) (p w -> m ()) -> Source m p r w | pure m
12 source read write = rwpair (ReadSource read) (WriteSource write)
14 instance read ReadSource
16 read (ReadSource read) p = Read <$> read p
18 instance write WriteSource
20 write (WriteSource write) p w = Written <$> write p w
22 instance read (RWPair sdsr sdsw) | read sdsr
24 read (RWPair s w _) p = read s p >>= \v->case v of
25 Reading s = pure $ Reading (rwpair s w)
26 Read r = pure $ Read r
28 instance write (RWPair sdsr sdsw) | write sdsw
30 write (RWPair r s _) p w = write s p w >>= \v->case v of
31 Writing s = pure $ Writing $ rwpair r s
32 Written _ = pure $ Written ()
34 constShare :: a -> ReadSource m p a b | pure m
35 constShare a = ReadSource \_->pure a
37 nullShare :: WriteSource m p a b | pure m
38 nullShare = WriteSource \_ _->pure ()