import System.IO
import System.Time
-instance MonadFail Maybe where fail _ = Nothing
+instance MonadFail ? where fail _ = ?None
instance MonadFail [] where fail _ = []
instance MonadFail (Either a) | fromString a where fail s = Left $ fromString s
instance MonadFail (StateT s m) | MonadFail m where fail s = liftT $ fail s
Writing s = pure $ Writing $ Par {t & writel= \_->pure (w1, w2), left=nullShare, right=s}
Writing s = pure $ Writing $ Par {t & writel= \_->pure (w1, w2), left=s}
-lens :: (r1 -> m r) (w r1 -> m (Maybe w1)) (sds m r1 w1) -> Lens sds m r w | TC r1 & TC w1
+lens :: (r1 -> m r) (w r1 -> m (? w1)) (sds m r1 w1) -> Lens sds m r w | TC r1 & TC w1
lens mapr mapw lens = Lens {mapr=mapr,mapw=mapw,lens=lens}
instance read (Lens sds) | read sds
where
write (Lens t=:{mapw,lens}) w = read lens >>= \v->case v of
Read r = mapw w r >>= \w->case w of
- Nothing = pure $ Written ()
- Just w = write lens w >>= \v->case v of
+ ?None = pure $ Written ()
+ ?Just w = write lens w >>= \v->case v of
Written _ = pure $ Written ()
- Writing s = pure $ Writing $ Lens {t & mapw= \_ _->pure $ Just w, lens=RWPair (constShare r) s}
+ Writing s = pure $ Writing $ Lens {t & mapw= \_ _->pure $ ?Just w, lens=RWPair (constShare r) s}
Reading s = pure $ Writing $ Lens {t & lens=RWPair s lens}
mapRead :: (r -> m r`) (sds m r w) -> Lens sds m r` w | TC r` & TC r & TC w & Monad m
-mapRead f sds = lens f (\_ _->pure Nothing) sds
+mapRead f sds = lens f (\_ _->pure ?None) sds
fromDynStore :: (sds m Dynamic Dynamic) -> Lens sds m r w | TC r & TC w & MonadFail m
fromDynStore sds = lens
(\r->case r of
(r :: r^) = pure r
_ = fail "type mismatch")
- (\w _->pure $ Just (dynamic w))
+ (\w _->pure $ ?Just (dynamic w))
sds
toDynStore :: (sds m r w) -> Lens sds m Dynamic Dynamic | TC r & TC w & MonadFail m
toDynStore sds = lens
(\r->pure (dynamic r))
(\w _->case w of
- (w :: w^) = pure $ Just w
+ (w :: w^) = pure $ ?Just w
_ = fail "type mismatch")
sds
-mapWrite :: (w` r -> m (Maybe w)) (sds m r w) -> Lens sds m r w` | TC r & TC w & TC w` & Monad m
+mapWrite :: (w` r -> m (? w)) (sds m r w) -> Lens sds m r w` | TC r & TC w & TC w` & Monad m
mapWrite f sds = lens pure f sds
indexedStore :: Int (sds m [a] [a]) -> Lens sds m a a | TC a & MonadFail m
indexedStore idx sds = lens
(\r->maybe (fail "out of range") pure (r !? idx))
- (\w->pure o Just o updateAt idx w)
+ (\w->pure o ?Just o updateAt idx w)
sds
keyedStore :: k (sds m (Map k v) (Map k v)) -> Lens sds m v v | TC v & TC k & < k & MonadFail m
keyedStore key sds = lens
(maybe (fail "key not present") pure o 'Data.Map'.get key)
- (\w->pure o Just o 'Data.Map'.put key w)
+ (\w->pure o ?Just o 'Data.Map'.put key w)
sds
select :: (sdsl m r1 w1) (r1 -> m (sdsr m r w)) -> Select sdsl sdsr m r w | TC r1 & TC w1 & Monad m