aboutsummaryrefslogtreecommitdiff
path: root/Graphics/Glyph/Util.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Graphics/Glyph/Util.hs')
-rw-r--r--Graphics/Glyph/Util.hs11
1 files changed, 10 insertions, 1 deletions
diff --git a/Graphics/Glyph/Util.hs b/Graphics/Glyph/Util.hs
index 2a3e060..90640a4 100644
--- a/Graphics/Glyph/Util.hs
+++ b/Graphics/Glyph/Util.hs
@@ -286,11 +286,20 @@ plusM a = MonadPlusBuilder a ()
runMonadPlusBuilder :: MonadPlusBuilder a b -> a
runMonadPlusBuilder (MonadPlusBuilder !a _) = a
+instance (MonadPlus a) => Functor (MonadPlusBuilder (a b)) where
+ fmap f b = b >>= return . f
+
+instance (MonadPlus a) => Applicative (MonadPlusBuilder (a b)) where
+ (<*>) afn aa = do
+ fn <- afn
+ fn <$> aa
+
+ pure = return
+
instance (MonadPlus a) => Monad (MonadPlusBuilder (a b)) where
return = MonadPlusBuilder mzero
MonadPlusBuilder a1 _ >> MonadPlusBuilder a2 b = MonadPlusBuilder (a1 `mplus` a2) b
builder@(MonadPlusBuilder _ b) >>= f = builder >> f b
- fail = undefined
untilM2 :: (Monad m) => (a -> m Bool) -> a -> (a -> m a) -> m a
untilM2 cond ini bod = do