{- |
Module      :  Neovim.Util
Description :  Utility functions
Copyright   :  (c) Sebastian Witte
License     :  Apache-2.0

Maintainer  :  woozletoff@gmail.com
Stability   :  experimental
Portability :  GHC

-}
module Neovim.Util (
    whenM,
    unlessM,
    oneLineErrorMessage,
    ) where

import           Control.Monad       (when, unless)
import           Neovim.Context
import qualified Data.Text as T


-- | 'when' with a monadic predicate.
whenM :: (Monad m) => m Bool -> m () -> m ()
whenM :: m Bool -> m () -> m ()
whenM m Bool
mp m ()
a = m Bool
mp m Bool -> (Bool -> m ()) -> m ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Bool
p -> Bool -> m () -> m ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when Bool
p m ()
a


-- | 'unless' with a monadic predicate.
unlessM :: (Monad m) => m Bool -> m () -> m ()
unlessM :: m Bool -> m () -> m ()
unlessM m Bool
mp m ()
a = m Bool
mp m Bool -> (Bool -> m ()) -> m ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Bool
p -> Bool -> m () -> m ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless Bool
p m ()
a


oneLineErrorMessage :: Doc AnsiStyle -> T.Text
oneLineErrorMessage :: Doc AnsiStyle -> Text
oneLineErrorMessage Doc AnsiStyle
d = case Text -> [Text]
T.lines (Text -> [Text]) -> Text -> [Text]
forall a b. (a -> b) -> a -> b
$ Doc AnsiStyle -> Text
docToText Doc AnsiStyle
d of
    (Text
x:[Text]
_) -> Text
x
    []    -> Text
forall a. Monoid a => a
mempty