packages feed

mdoc-0.2.0.0: src/Mdoc/Prelude.hs

-- |
--
-- Module      : Mdoc.Prelude
-- Copyright   : (c) 2026 Patrick Brisbin
-- License     : AGPL-3
-- Maintainer  : pbrisbin@gmail.com
-- Stability   : experimental
-- Portability : POSIX
module Mdoc.Prelude
  ( module X
  , throwIO
  , guarded
  , esc
  ) where

import Prelude as X hiding (head, init, last, tail)

import Control.Applicative as X (Alternative, asum, (<|>))
import Control.Exception as X (Exception)
import Control.Exception qualified as Ex
import Control.Monad as X (guard, unless, void, when, (<=<))
import Control.Monad.IO.Class as X (MonadIO (..))
import Control.Monad.Trans as X (MonadTrans (..))
import Data.Aeson as X (ToJSON (..))
import Data.Bifunctor as X (bimap, first, second)
import Data.Foldable as X (for_, toList, traverse_)
import Data.Foldable1 as X (foldMap1, maximumBy)
import Data.Function as X ((&))
import Data.Functor as X ((<&>))
import Data.Functor.Identity as X (Identity)
import Data.List as X (intercalate, intersperse)
import Data.List.NonEmpty as X
  ( NonEmpty (..)
  , head
  , init
  , last
  , nonEmpty
  , some1
  , tail
  )
import Data.List.NonEmpty.Extra as X ((|:))
import Data.Maybe as X (catMaybes, fromMaybe, isJust, isNothing, mapMaybe)
import Data.Monoid as X (Alt (..))
import Data.Ord as X (comparing)
import Data.Proxy as X (Proxy (..))
import Data.Semigroup as X (Any (..), Endo (..), First (..), sconcat)
import Data.Set as X (Set)
import Data.String as X (IsString (..))
import Data.Text as X (Text, pack, unpack)
import Data.Text qualified as T
import Data.Void as X (Void, absurd)
import Debug.Trace as X
import GHC.Generics as X (Generic, Generically (..))

throwIO :: (Exception e, MonadIO m) => e -> m a
throwIO = liftIO . Ex.throwIO

guarded :: Alternative f => (a -> Bool) -> a -> f a
guarded p a = a <$ guard (p a)

esc :: Text -> Text
esc =
  T.replace "\\n" "\\\\n"
    . T.replace "-" "\\-"