-- SPDX-FileCopyrightText: 2022 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA

{-# OPTIONS_HADDOCK not-home #-}

-- | This module defines 'ErrorsClarification' and required instances to use it
-- with 'ExceptionAnnotation'.
module Test.Cleveland.Internal.Exceptions.ErrorsClarification
  ( module Test.Cleveland.Internal.Exceptions.ErrorsClarification
  ) where

import Fmt (Doc, nameF)

import Test.Cleveland.Internal.Exceptions.Annotated

-- | Used to add text prefixes to exception messages.
--
-- Implementation detail of 'Test.Cleveland.clarifyErrors'.
newtype ErrorsClarification = ErrorsClarification [Doc]
  deriving stock Int -> ErrorsClarification -> ShowS
[ErrorsClarification] -> ShowS
ErrorsClarification -> String
(Int -> ErrorsClarification -> ShowS)
-> (ErrorsClarification -> String)
-> ([ErrorsClarification] -> ShowS)
-> Show ErrorsClarification
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ErrorsClarification] -> ShowS
$cshowList :: [ErrorsClarification] -> ShowS
show :: ErrorsClarification -> String
$cshow :: ErrorsClarification -> String
showsPrec :: Int -> ErrorsClarification -> ShowS
$cshowsPrec :: Int -> ErrorsClarification -> ShowS
Show
  deriving newtype NonEmpty ErrorsClarification -> ErrorsClarification
ErrorsClarification -> ErrorsClarification -> ErrorsClarification
(ErrorsClarification -> ErrorsClarification -> ErrorsClarification)
-> (NonEmpty ErrorsClarification -> ErrorsClarification)
-> (forall b.
    Integral b =>
    b -> ErrorsClarification -> ErrorsClarification)
-> Semigroup ErrorsClarification
forall b.
Integral b =>
b -> ErrorsClarification -> ErrorsClarification
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
stimes :: forall b.
Integral b =>
b -> ErrorsClarification -> ErrorsClarification
$cstimes :: forall b.
Integral b =>
b -> ErrorsClarification -> ErrorsClarification
sconcat :: NonEmpty ErrorsClarification -> ErrorsClarification
$csconcat :: NonEmpty ErrorsClarification -> ErrorsClarification
<> :: ErrorsClarification -> ErrorsClarification -> ErrorsClarification
$c<> :: ErrorsClarification -> ErrorsClarification -> ErrorsClarification
Semigroup

instance ExceptionAnnotation ErrorsClarification where
  displayAnnotation :: ErrorsClarification -> Doc -> Doc
displayAnnotation (ErrorsClarification [Doc]
as) = (Doc -> [Doc] -> Doc) -> [Doc] -> Doc -> Doc
forall a b c. (a -> b -> c) -> b -> a -> c
flip ((Element [Doc] -> Doc -> Doc) -> Doc -> [Doc] -> Doc
forall t b. Container t => (Element t -> b -> b) -> b -> t -> b
foldr Element [Doc] -> Doc -> Doc
forall a. Buildable a => Doc -> a -> Doc
nameF) [Doc]
as