hChar4 ::
  Handle
  -> IO (Maybe (Char, Char, Char, Char))
hChar4 h =
  -- MaybeT
  let (.>>=.) :: Monad f => f (Maybe a) -> (a -> f (Maybe b)) -> f (Maybe b)
      i .>>=. f =
        do m <- i
           case m of
             Nothing -> return Nothing
             Just a -> f a
  in hChar h .>>=. \c1 ->
     hChar h .>>=. \c2 -> 
     hChar h .>>=. \c3 -> 
     hChar h .>>=. \c4 -> 
     return (Just (c1, c2, c3, c4))
hChar4 ::
  Handle
  -> IO (Maybe (Char, Char, Char, Char))
hChar4 h =
  -- MaybeT
  let (.>>=.) :: Monad f => f (Maybe a) -> (a -> f (Maybe b)) -> f (Maybe b)
      i .>>=. f =
        do m <- i
           case m of
             Nothing -> return Nothing
             Just a -> f a
  in hChar h .>>=. \c1 ->
     hChar h .>>=. \c2 -> 
     hChar h .>>=. \c3 -> 
     hChar h .>>=. \c4 -> 
     return (Just (c1, c2, c3, c4))
hChar4 h =
  -- MaybeT
  let (.>>=.) :: Monad f => f (Maybe a) -> (a -> f (Maybe b)) -> f (Maybe b)
      i .>>=. f =
        do m <- i
           case m of
             Nothing -> return Nothing
             Just a -> f a
  in hChar h .>>=. \c1 ->
     hChar h .>>=. \c2 -> 
     hChar h .>>=. \c3 -> 
     hChar h .>>=. \c4 -> 
     return (Just (c1, c2, c3, c4))