From c5c3fec26c7a67c1277a270f815dd214fd21f12c Mon Sep 17 00:00:00 2001 From: Peter Simons <simons@cryp.to> Date: Fri, 28 Sep 2018 11:47:11 +0200 Subject: [PATCH] inhale: avoid monadic pattern matching in pure code These changes avoid the need for having a MonadFail instance for Decoder. --- XMonad/Hooks/DebugEvents.hs | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/XMonad/Hooks/DebugEvents.hs b/XMonad/Hooks/DebugEvents.hs index 96dc1b35..8292a2a4 100644 --- a/XMonad/Hooks/DebugEvents.hs +++ b/XMonad/Hooks/DebugEvents.hs @@ -1178,20 +1178,23 @@ getInt w f = getInt' w >>= maybe (return False) (append . f) -- @@@@@@@@@ evil beyond evil. there *has* to be a better way inhale :: Int -> Decoder Integer inhale 8 = do - [b] <- eat 1 - return $ fromIntegral b + x <- eat 1 + case x of + [b] -> return $ fromIntegral b inhale 16 = do - [b0,b1] <- eat 2 - io $ allocaArray 2 $ \p -> do - pokeArray p [b0,b1] - [v] <- peekArray 1 (castPtr p :: Ptr Word16) - return $ fromIntegral v + x <- eat 2 + case x of + [b0,b1] -> io $ allocaArray 2 $ \p -> do + pokeArray p [b0,b1] + [v] <- peekArray 1 (castPtr p :: Ptr Word16) + return $ fromIntegral v inhale 32 = do - [b0,b1,b2,b3] <- eat 4 - io $ allocaArray 4 $ \p -> do - pokeArray p [b0,b1,b2,b3] - [v] <- peekArray 1 (castPtr p :: Ptr Word32) - return $ fromIntegral v + x <- eat 4 + case x of + [b0,b1,b2,b3] -> io $ allocaArray 4 $ \p -> do + pokeArray p [b0,b1,b2,b3] + [v] <- peekArray 1 (castPtr p :: Ptr Word32) + return $ fromIntegral v inhale b = error $ "inhale " ++ show b eat :: Int -> Decoder Raw