{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
module Data.Portray.Prettyprinter
(
showPortrayal, pp
, showDiff, ppd
, WrappedPortray(..)
, DocAssocPrec, toDocAssocPrecF, toDocAssocPrec
, portrayalToDocPrecF, portrayalToDocPrec
, portrayalToDoc
, prettyShowPortrayal
) where
import Data.Functor ((<&>))
import Data.Text (Text)
import qualified Data.Text.IO as T (putStrLn)
import Prettyprinter (Doc, Pretty(..))
import qualified Prettyprinter as P
import qualified Prettyprinter.Render.Text as R
import Data.Portray
( Assoc(..), Infixity(..), FactorPortrayal(..)
, Portray, Portrayal(..), PortrayalF(..)
, cata, portray
)
import Data.Portray.Diff (Diff(..))
pp :: Portray a => a -> IO ()
pp :: a -> IO ()
pp = Text -> IO ()
T.putStrLn (Text -> IO ()) -> (a -> Text) -> a -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Text
forall a. Portray a => a -> Text
showPortrayal
showPortrayal :: Portray a => a -> Text
showPortrayal :: a -> Text
showPortrayal = Portrayal -> Text
prettyShowPortrayal (Portrayal -> Text) -> (a -> Portrayal) -> a -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Portrayal
forall a. Portray a => a -> Portrayal
portray
ppd :: Diff a => a -> a -> IO ()
ppd :: a -> a -> IO ()
ppd a
x = Text -> IO ()
T.putStrLn (Text -> IO ()) -> (a -> Text) -> a -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> a -> Text
forall a. Diff a => a -> a -> Text
showDiff a
x
showDiff :: Diff a => a -> a -> Text
showDiff :: a -> a -> Text
showDiff a
x = Text -> (Portrayal -> Text) -> Maybe Portrayal -> Text
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Text
"_" Portrayal -> Text
prettyShowPortrayal (Maybe Portrayal -> Text) -> (a -> Maybe Portrayal) -> a -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> a -> Maybe Portrayal
forall a. Diff a => a -> a -> Maybe Portrayal
diff a
x
type DocAssocPrec ann = Assoc -> Rational -> Doc ann
fixityCompatible :: Infixity -> Assoc -> Rational -> Bool
fixityCompatible :: Infixity -> Assoc -> Rational -> Bool
fixityCompatible (Infixity Assoc
assoc Rational
p) Assoc
assoc' Rational
p' = case Rational -> Rational -> Ordering
forall a. Ord a => a -> a -> Ordering
compare Rational
p' Rational
p of
Ordering
GT -> Bool
False
Ordering
EQ -> Assoc
assoc Assoc -> Assoc -> Bool
forall a. Eq a => a -> a -> Bool
== Assoc
assoc'
Ordering
LT -> Bool
True
matchCtx :: Assoc -> Assoc -> Assoc
matchCtx :: Assoc -> Assoc -> Assoc
matchCtx Assoc
ctx Assoc
assoc
| Assoc
ctx Assoc -> Assoc -> Bool
forall a. Eq a => a -> a -> Bool
== Assoc
assoc = Assoc
ctx
| Bool
otherwise = Assoc
AssocNope
portrayalToDoc :: Portrayal -> Doc ann
portrayalToDoc :: Portrayal -> Doc ann
portrayalToDoc Portrayal
t = Portrayal -> Rational -> Doc ann
forall ann. Portrayal -> Rational -> Doc ann
portrayalToDocPrec Portrayal
t (-Rational
1)
maybeParens :: Bool -> Doc ann -> Doc ann
maybeParens :: Bool -> Doc ann -> Doc ann
maybeParens = \case Bool
True -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
P.parens; Bool
False -> Doc ann -> Doc ann
forall a. a -> a
id
text :: Text -> Doc ann
text :: Text -> Doc ann
text = Text -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty
char :: Char -> Doc ann
char :: Char -> Doc ann
char = Char -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty
ppBinop
:: Text
-> Infixity
-> DocAssocPrec ann -> DocAssocPrec ann -> DocAssocPrec ann
ppBinop :: Text
-> Infixity
-> DocAssocPrec ann
-> DocAssocPrec ann
-> DocAssocPrec ann
ppBinop Text
nm fx :: Infixity
fx@(Infixity Assoc
assoc Rational
opPrec) DocAssocPrec ann
x DocAssocPrec ann
y Assoc
lr Rational
p =
Bool -> Doc ann -> Doc ann
forall ann. Bool -> Doc ann -> Doc ann
maybeParens (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Infixity -> Assoc -> Rational -> Bool
fixityCompatible Infixity
fx Assoc
lr Rational
p) (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$ Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
P.nest Int
2 (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$ [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
P.sep
[ DocAssocPrec ann
x (Assoc -> Assoc -> Assoc
matchCtx Assoc
AssocL Assoc
assoc) Rational
opPrec Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
P.<+> Text -> Doc ann
forall ann. Text -> Doc ann
text Text
nm
, DocAssocPrec ann
y (Assoc -> Assoc -> Assoc
matchCtx Assoc
AssocR Assoc
assoc) Rational
opPrec
]
ppBulletList
:: Doc ann
-> Doc ann
-> Doc ann
-> [Doc ann]
-> Doc ann
ppBulletList :: Doc ann -> Doc ann -> Doc ann -> [Doc ann] -> Doc ann
ppBulletList Doc ann
opener Doc ann
_ Doc ann
closer [] = Doc ann
opener Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
closer
ppBulletList Doc ann
opener Doc ann
separator Doc ann
closer (Doc ann
doc:[Doc ann]
docs) =
Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
P.group (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$
(Doc ann -> Doc ann -> Doc ann) -> [Doc ann] -> Doc ann
forall (t :: * -> *) ann.
Foldable t =>
(Doc ann -> Doc ann -> Doc ann) -> t (Doc ann) -> Doc ann
P.concatWith (\Doc ann
x Doc ann
y -> Doc ann
x Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann
P.group (Doc ann
forall ann. Doc ann
P.line' Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
y))
(Doc ann
opener Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
P.flatAlt Doc ann
" " Doc ann
"" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
doc Doc ann -> [Doc ann] -> [Doc ann]
forall a. a -> [a] -> [a]
:
(Doc ann -> Doc ann -> Doc ann)
-> [Doc ann] -> [Doc ann] -> [Doc ann]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
(P.<+>) (Doc ann -> [Doc ann]
forall a. a -> [a]
repeat Doc ann
separator) [Doc ann]
docs) Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<>
Doc ann
forall ann. Doc ann
P.line' Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
closer
toDocAssocPrecF :: PortrayalF (DocAssocPrec ann) -> DocAssocPrec ann
toDocAssocPrecF :: PortrayalF (DocAssocPrec ann) -> DocAssocPrec ann
toDocAssocPrecF = \case
AtomF Text
txt -> \Assoc
_ Rational
_ -> Text -> Doc ann
forall ann. Text -> Doc ann
text Text
txt
ApplyF DocAssocPrec ann
fn [] -> \Assoc
_ Rational
_ -> DocAssocPrec ann
fn Assoc
AssocL Rational
10
ApplyF DocAssocPrec ann
fn [DocAssocPrec ann]
xs -> \Assoc
lr Rational
p ->
Bool -> Doc ann -> Doc ann
forall ann. Bool -> Doc ann -> Doc ann
maybeParens (Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Infixity -> Assoc -> Rational -> Bool
fixityCompatible (Assoc -> Rational -> Infixity
Infixity Assoc
AssocL Rational
10) Assoc
lr Rational
p) (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$
Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
P.nest Int
2 (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$ [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
P.sep
[ DocAssocPrec ann
fn Assoc
AssocL Rational
10
, [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
P.sep ([Doc ann] -> Doc ann) -> [Doc ann] -> Doc ann
forall a b. (a -> b) -> a -> b
$ [DocAssocPrec ann]
xs [DocAssocPrec ann] -> (DocAssocPrec ann -> Doc ann) -> [Doc ann]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \DocAssocPrec ann
docprec -> DocAssocPrec ann
docprec Assoc
AssocR Rational
10
]
BinopF Text
nm Infixity
fx DocAssocPrec ann
x DocAssocPrec ann
y -> Text
-> Infixity
-> DocAssocPrec ann
-> DocAssocPrec ann
-> DocAssocPrec ann
forall ann.
Text
-> Infixity
-> DocAssocPrec ann
-> DocAssocPrec ann
-> DocAssocPrec ann
ppBinop Text
nm Infixity
fx DocAssocPrec ann
x DocAssocPrec ann
y
TupleF [DocAssocPrec ann]
xs -> \Assoc
_ Rational
_ -> Doc ann -> Doc ann -> Doc ann -> [Doc ann] -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann -> [Doc ann] -> Doc ann
ppBulletList Doc ann
"(" Doc ann
"," Doc ann
")" ([Doc ann] -> Doc ann) -> [Doc ann] -> Doc ann
forall a b. (a -> b) -> a -> b
$ [DocAssocPrec ann]
xs [DocAssocPrec ann] -> (DocAssocPrec ann -> Doc ann) -> [Doc ann]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \DocAssocPrec ann
x -> DocAssocPrec ann
x Assoc
AssocNope (-Rational
1)
ListF [DocAssocPrec ann]
xs -> \Assoc
_ Rational
_ -> Doc ann -> Doc ann -> Doc ann -> [Doc ann] -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann -> [Doc ann] -> Doc ann
ppBulletList Doc ann
"[" Doc ann
"," Doc ann
"]" ([Doc ann] -> Doc ann) -> [Doc ann] -> Doc ann
forall a b. (a -> b) -> a -> b
$ [DocAssocPrec ann]
xs [DocAssocPrec ann] -> (DocAssocPrec ann -> Doc ann) -> [Doc ann]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \DocAssocPrec ann
x -> DocAssocPrec ann
x Assoc
AssocNope (-Rational
1)
LambdaCaseF [(DocAssocPrec ann, DocAssocPrec ann)]
xs -> \Assoc
_ Rational
p ->
Bool -> Doc ann -> Doc ann
forall ann. Bool -> Doc ann -> Doc ann
maybeParens (Rational
p Rational -> Rational -> Bool
forall a. Ord a => a -> a -> Bool
>= Rational
10) (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$
Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
P.nest Int
2 (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$ [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
P.sep
[ Doc ann
"\\case"
, Doc ann -> Doc ann -> Doc ann -> [Doc ann] -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann -> [Doc ann] -> Doc ann
ppBulletList Doc ann
"{" Doc ann
";" Doc ann
"}"
[ Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
P.nest Int
2 (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$ [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
P.sep ([Doc ann] -> Doc ann) -> [Doc ann] -> Doc ann
forall a b. (a -> b) -> a -> b
$
[ DocAssocPrec ann
pat Assoc
AssocNope Rational
0 Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
P.<+> Doc ann
"->"
, DocAssocPrec ann
val Assoc
AssocNope Rational
0
]
| (DocAssocPrec ann
pat, DocAssocPrec ann
val) <- [(DocAssocPrec ann, DocAssocPrec ann)]
xs
]
]
RecordF DocAssocPrec ann
con [FactorPortrayal (DocAssocPrec ann)]
sels -> \Assoc
_ Rational
_ -> case [FactorPortrayal (DocAssocPrec ann)]
sels of
[] -> DocAssocPrec ann
con Assoc
AssocNope (-Rational
1)
[FactorPortrayal (DocAssocPrec ann)]
_ -> Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
P.nest Int
2 (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$ [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
P.sep
[ DocAssocPrec ann
con Assoc
AssocNope Rational
10
, Doc ann -> Doc ann -> Doc ann -> [Doc ann] -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann -> [Doc ann] -> Doc ann
ppBulletList Doc ann
"{" Doc ann
"," Doc ann
"}"
[ Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
P.nest Int
2 (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$ [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
P.sep
[ Text -> Doc ann
forall ann. Text -> Doc ann
text Text
sel Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
P.<+> Doc ann
"="
, DocAssocPrec ann
val Assoc
AssocNope Rational
0
]
| FactorPortrayal Text
sel DocAssocPrec ann
val <- [FactorPortrayal (DocAssocPrec ann)]
sels
]
]
TyAppF DocAssocPrec ann
val DocAssocPrec ann
ty -> \Assoc
_ Rational
_ ->
Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
P.nest Int
2 (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$ [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
P.sep [DocAssocPrec ann
val Assoc
AssocNope Rational
10, Doc ann
"@" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> DocAssocPrec ann
ty Assoc
AssocNope Rational
10]
TySigF DocAssocPrec ann
val DocAssocPrec ann
ty -> \Assoc
_ Rational
p -> Bool -> Doc ann -> Doc ann
forall ann. Bool -> Doc ann -> Doc ann
maybeParens (Rational
p Rational -> Rational -> Bool
forall a. Ord a => a -> a -> Bool
>= Rational
0) (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$
Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
P.nest Int
2 (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$ [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
P.sep [DocAssocPrec ann
val Assoc
AssocNope Rational
0, Doc ann
"::" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
P.<+> DocAssocPrec ann
ty Assoc
AssocNope Rational
0]
QuotF Text
nm DocAssocPrec ann
content -> \Assoc
_ Rational
_ ->
Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
P.nest Int
2 (Doc ann -> Doc ann) -> Doc ann -> Doc ann
forall a b. (a -> b) -> a -> b
$ [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
P.sep
[ Char -> Doc ann
forall ann. Char -> Doc ann
char Char
'[' Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Text -> Doc ann
forall ann. Text -> Doc ann
text Text
nm Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Char -> Doc ann
forall ann. Char -> Doc ann
char Char
'|'
, DocAssocPrec ann
content Assoc
AssocNope (-Rational
1)
, Doc ann
"|]"
]
UnlinesF [DocAssocPrec ann]
ls -> \Assoc
_ Rational
_ -> [Doc ann] -> Doc ann
forall ann. [Doc ann] -> Doc ann
P.vcat ([DocAssocPrec ann]
ls [DocAssocPrec ann] -> (DocAssocPrec ann -> Doc ann) -> [Doc ann]
forall (f :: * -> *) a b. Functor f => f a -> (a -> b) -> f b
<&> \DocAssocPrec ann
l -> DocAssocPrec ann
l Assoc
AssocNope (-Rational
1))
NestF Int
n DocAssocPrec ann
x -> \Assoc
_ Rational
_ -> Int -> Doc ann -> Doc ann
forall ann. Int -> Doc ann -> Doc ann
P.nest Int
n (DocAssocPrec ann
x Assoc
AssocNope (-Rational
1))
toDocPrec :: DocAssocPrec ann -> Rational -> Doc ann
toDocPrec :: DocAssocPrec ann -> Rational -> Doc ann
toDocPrec DocAssocPrec ann
dap = DocAssocPrec ann
dap Assoc
AssocNope (Rational -> Doc ann)
-> (Rational -> Rational) -> Rational -> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Rational -> Rational -> Rational
forall a. Num a => a -> a -> a
subtract Rational
1
portrayalToDocPrecF
:: PortrayalF (DocAssocPrec ann) -> Rational -> Doc ann
portrayalToDocPrecF :: PortrayalF (DocAssocPrec ann) -> Rational -> Doc ann
portrayalToDocPrecF = DocAssocPrec ann -> Rational -> Doc ann
forall ann. DocAssocPrec ann -> Rational -> Doc ann
toDocPrec (DocAssocPrec ann -> Rational -> Doc ann)
-> (PortrayalF (DocAssocPrec ann) -> DocAssocPrec ann)
-> PortrayalF (DocAssocPrec ann)
-> Rational
-> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PortrayalF (DocAssocPrec ann) -> DocAssocPrec ann
forall ann. PortrayalF (DocAssocPrec ann) -> DocAssocPrec ann
toDocAssocPrecF
toDocAssocPrec :: Portrayal -> DocAssocPrec ann
toDocAssocPrec :: Portrayal -> DocAssocPrec ann
toDocAssocPrec = (PortrayalF (DocAssocPrec ann) -> DocAssocPrec ann)
-> Fix PortrayalF -> DocAssocPrec ann
forall (f :: * -> *) a. Functor f => (f a -> a) -> Fix f -> a
cata PortrayalF (DocAssocPrec ann) -> DocAssocPrec ann
forall ann. PortrayalF (DocAssocPrec ann) -> DocAssocPrec ann
toDocAssocPrecF (Fix PortrayalF -> DocAssocPrec ann)
-> (Portrayal -> Fix PortrayalF) -> Portrayal -> DocAssocPrec ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Portrayal -> Fix PortrayalF
unPortrayal
portrayalToDocPrec :: Portrayal -> Rational -> Doc ann
portrayalToDocPrec :: Portrayal -> Rational -> Doc ann
portrayalToDocPrec = DocAssocPrec ann -> Rational -> Doc ann
forall ann. DocAssocPrec ann -> Rational -> Doc ann
toDocPrec (DocAssocPrec ann -> Rational -> Doc ann)
-> (Portrayal -> DocAssocPrec ann)
-> Portrayal
-> Rational
-> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Portrayal -> DocAssocPrec ann
forall ann. Portrayal -> DocAssocPrec ann
toDocAssocPrec
prettyShowPortrayal :: Portrayal -> Text
prettyShowPortrayal :: Portrayal -> Text
prettyShowPortrayal Portrayal
p =
SimpleDocStream Any -> Text
forall ann. SimpleDocStream ann -> Text
R.renderStrict (SimpleDocStream Any -> Text) -> SimpleDocStream Any -> Text
forall a b. (a -> b) -> a -> b
$ LayoutOptions -> Doc Any -> SimpleDocStream Any
forall ann. LayoutOptions -> Doc ann -> SimpleDocStream ann
P.layoutPretty LayoutOptions
P.defaultLayoutOptions (Doc Any -> SimpleDocStream Any) -> Doc Any -> SimpleDocStream Any
forall a b. (a -> b) -> a -> b
$
Portrayal -> DocAssocPrec Any
forall ann. Portrayal -> DocAssocPrec ann
toDocAssocPrec Portrayal
p Assoc
AssocNope (-Rational
1)
newtype WrappedPortray a = WrappedPortray { WrappedPortray a -> a
unWrappedPortray :: a }
deriving newtype (WrappedPortray a -> WrappedPortray a -> Bool
(WrappedPortray a -> WrappedPortray a -> Bool)
-> (WrappedPortray a -> WrappedPortray a -> Bool)
-> Eq (WrappedPortray a)
forall a. Eq a => WrappedPortray a -> WrappedPortray a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: WrappedPortray a -> WrappedPortray a -> Bool
$c/= :: forall a. Eq a => WrappedPortray a -> WrappedPortray a -> Bool
== :: WrappedPortray a -> WrappedPortray a -> Bool
$c== :: forall a. Eq a => WrappedPortray a -> WrappedPortray a -> Bool
Eq, Eq (WrappedPortray a)
Eq (WrappedPortray a)
-> (WrappedPortray a -> WrappedPortray a -> Ordering)
-> (WrappedPortray a -> WrappedPortray a -> Bool)
-> (WrappedPortray a -> WrappedPortray a -> Bool)
-> (WrappedPortray a -> WrappedPortray a -> Bool)
-> (WrappedPortray a -> WrappedPortray a -> Bool)
-> (WrappedPortray a -> WrappedPortray a -> WrappedPortray a)
-> (WrappedPortray a -> WrappedPortray a -> WrappedPortray a)
-> Ord (WrappedPortray a)
WrappedPortray a -> WrappedPortray a -> Bool
WrappedPortray a -> WrappedPortray a -> Ordering
WrappedPortray a -> WrappedPortray a -> WrappedPortray a
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall a. Ord a => Eq (WrappedPortray a)
forall a. Ord a => WrappedPortray a -> WrappedPortray a -> Bool
forall a. Ord a => WrappedPortray a -> WrappedPortray a -> Ordering
forall a.
Ord a =>
WrappedPortray a -> WrappedPortray a -> WrappedPortray a
min :: WrappedPortray a -> WrappedPortray a -> WrappedPortray a
$cmin :: forall a.
Ord a =>
WrappedPortray a -> WrappedPortray a -> WrappedPortray a
max :: WrappedPortray a -> WrappedPortray a -> WrappedPortray a
$cmax :: forall a.
Ord a =>
WrappedPortray a -> WrappedPortray a -> WrappedPortray a
>= :: WrappedPortray a -> WrappedPortray a -> Bool
$c>= :: forall a. Ord a => WrappedPortray a -> WrappedPortray a -> Bool
> :: WrappedPortray a -> WrappedPortray a -> Bool
$c> :: forall a. Ord a => WrappedPortray a -> WrappedPortray a -> Bool
<= :: WrappedPortray a -> WrappedPortray a -> Bool
$c<= :: forall a. Ord a => WrappedPortray a -> WrappedPortray a -> Bool
< :: WrappedPortray a -> WrappedPortray a -> Bool
$c< :: forall a. Ord a => WrappedPortray a -> WrappedPortray a -> Bool
compare :: WrappedPortray a -> WrappedPortray a -> Ordering
$ccompare :: forall a. Ord a => WrappedPortray a -> WrappedPortray a -> Ordering
$cp1Ord :: forall a. Ord a => Eq (WrappedPortray a)
Ord, Int -> WrappedPortray a -> ShowS
[WrappedPortray a] -> ShowS
WrappedPortray a -> String
(Int -> WrappedPortray a -> ShowS)
-> (WrappedPortray a -> String)
-> ([WrappedPortray a] -> ShowS)
-> Show (WrappedPortray a)
forall a. Show a => Int -> WrappedPortray a -> ShowS
forall a. Show a => [WrappedPortray a] -> ShowS
forall a. Show a => WrappedPortray a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [WrappedPortray a] -> ShowS
$cshowList :: forall a. Show a => [WrappedPortray a] -> ShowS
show :: WrappedPortray a -> String
$cshow :: forall a. Show a => WrappedPortray a -> String
showsPrec :: Int -> WrappedPortray a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> WrappedPortray a -> ShowS
Show)
instance Portray a => Pretty (WrappedPortray a) where
pretty :: WrappedPortray a -> Doc ann
pretty WrappedPortray a
x = Portrayal -> Rational -> Doc ann
forall ann. Portrayal -> Rational -> Doc ann
portrayalToDocPrec (a -> Portrayal
forall a. Portray a => a -> Portrayal
portray (a -> Portrayal) -> a -> Portrayal
forall a b. (a -> b) -> a -> b
$ WrappedPortray a -> a
forall a. WrappedPortray a -> a
unWrappedPortray WrappedPortray a
x) Rational
0