{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
module Data.Text.Display.Core where
import Control.Exception hiding (TypeError)
import Data.ByteString
import qualified Data.ByteString.Lazy as BL
import Data.Int
import Data.Kind
import Data.List.NonEmpty
import Data.Proxy
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
import Data.Text.Lazy.Builder (Builder)
import qualified Data.Text.Lazy.Builder as TB
import qualified Data.Text.Lazy.Builder.Int as TB
import qualified Data.Text.Lazy.Builder.RealFloat as TB
import Data.Void (Void)
import Data.Word
import GHC.TypeLits
class Display a where
{-# MINIMAL displayBuilder | displayPrec #-}
displayBuilder :: a -> Builder
displayBuilder = forall a. Display a => Int -> a -> Builder
displayPrec Int
0
displayList :: [a] -> Builder
displayList [] = Builder
"[]"
displayList (a
x : [a]
xs) = Builder
"[" forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Builder
displayBuilder a
x forall a. Semigroup a => a -> a -> a
<> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap a -> Builder
go [a]
xs forall a. Semigroup a => a -> a -> a
<> Builder
"]"
where
go :: a -> Builder
go :: a -> Builder
go a
y = Builder
"," forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Builder
displayBuilder a
y
displayPrec
:: Int
-> a
-> Builder
displayPrec Int
_ = forall a. Display a => a -> Builder
displayBuilder
display :: Display a => a -> Text
display :: forall a. Display a => a -> Text
display a
a = Text -> Text
TL.toStrict forall a b. (a -> b) -> a -> b
$ Builder -> Text
TB.toLazyText forall a b. (a -> b) -> a -> b
$ forall a. Display a => a -> Builder
displayBuilder a
a
instance CannotDisplayBareFunctions => Display (a -> b) where
displayBuilder :: (a -> b) -> Builder
displayBuilder = forall a. HasCallStack => a
undefined
type family CannotDisplayBareFunctions :: Constraint where
CannotDisplayBareFunctions =
TypeError
( 'Text "🚫 You should not try to display functions!"
':$$: 'Text "💡 Write a 'newtype' wrapper that represents your domain more accurately."
':$$: 'Text " If you are not consciously trying to use `display` on a function,"
':$$: 'Text " make sure that you are not missing an argument somewhere."
)
instance CannotDisplayByteStrings => Display ByteString where
displayBuilder :: ByteString -> Builder
displayBuilder = forall a. HasCallStack => a
undefined
instance CannotDisplayByteStrings => Display BL.ByteString where
displayBuilder :: ByteString -> Builder
displayBuilder = forall a. HasCallStack => a
undefined
type family CannotDisplayByteStrings :: Constraint where
CannotDisplayByteStrings =
TypeError
( 'Text "🚫 You should not try to display ByteStrings!"
':$$: 'Text "💡 Always provide an explicit encoding"
':$$: 'Text "Use 'Data.Text.Encoding.decodeUtf8'' or 'Data.Text.Encoding.decodeUtf8With' to convert from UTF-8"
)
displayParen :: Bool -> Builder -> Builder
displayParen :: Bool -> Builder -> Builder
displayParen Bool
b Builder
txt = if Bool
b then Builder
"(" forall a. Semigroup a => a -> a -> a
<> Builder
txt forall a. Semigroup a => a -> a -> a
<> Builder
")" else Builder
txt
newtype OpaqueInstance (str :: Symbol) (a :: Type) = Opaque a
instance KnownSymbol str => Display (OpaqueInstance str a) where
displayBuilder :: OpaqueInstance str a -> Builder
displayBuilder OpaqueInstance str a
_ = String -> Builder
TB.fromString forall a b. (a -> b) -> a -> b
$ forall (n :: Symbol) (proxy :: Symbol -> *).
KnownSymbol n =>
proxy n -> String
symbolVal (forall {k} (t :: k). Proxy t
Proxy @str)
newtype ShowInstance (a :: Type)
= ShowInstance a
deriving newtype
( Int -> ShowInstance a -> ShowS
[ShowInstance a] -> ShowS
ShowInstance a -> String
forall a. Show a => Int -> ShowInstance a -> ShowS
forall a. Show a => [ShowInstance a] -> ShowS
forall a. Show a => ShowInstance a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ShowInstance a] -> ShowS
$cshowList :: forall a. Show a => [ShowInstance a] -> ShowS
show :: ShowInstance a -> String
$cshow :: forall a. Show a => ShowInstance a -> String
showsPrec :: Int -> ShowInstance a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> ShowInstance a -> ShowS
Show
)
instance Show e => Display (ShowInstance e) where
displayBuilder :: ShowInstance e -> Builder
displayBuilder ShowInstance e
s = String -> Builder
TB.fromString forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show ShowInstance e
s
newtype DisplayDecimal e
= DisplayDecimal e
deriving newtype
(DisplayDecimal e -> Integer
DisplayDecimal e
-> DisplayDecimal e -> (DisplayDecimal e, DisplayDecimal e)
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
forall {e}. Integral e => Enum (DisplayDecimal e)
forall {e}. Integral e => Real (DisplayDecimal e)
forall e. Integral e => DisplayDecimal e -> Integer
forall e.
Integral e =>
DisplayDecimal e
-> DisplayDecimal e -> (DisplayDecimal e, DisplayDecimal e)
forall e.
Integral e =>
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
forall a.
Real a
-> Enum a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> (a, a))
-> (a -> a -> (a, a))
-> (a -> Integer)
-> Integral a
toInteger :: DisplayDecimal e -> Integer
$ctoInteger :: forall e. Integral e => DisplayDecimal e -> Integer
divMod :: DisplayDecimal e
-> DisplayDecimal e -> (DisplayDecimal e, DisplayDecimal e)
$cdivMod :: forall e.
Integral e =>
DisplayDecimal e
-> DisplayDecimal e -> (DisplayDecimal e, DisplayDecimal e)
quotRem :: DisplayDecimal e
-> DisplayDecimal e -> (DisplayDecimal e, DisplayDecimal e)
$cquotRem :: forall e.
Integral e =>
DisplayDecimal e
-> DisplayDecimal e -> (DisplayDecimal e, DisplayDecimal e)
mod :: DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
$cmod :: forall e.
Integral e =>
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
div :: DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
$cdiv :: forall e.
Integral e =>
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
rem :: DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
$crem :: forall e.
Integral e =>
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
quot :: DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
$cquot :: forall e.
Integral e =>
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
Integral, DisplayDecimal e -> Rational
forall a. Num a -> Ord a -> (a -> Rational) -> Real a
forall {e}. Real e => Num (DisplayDecimal e)
forall {e}. Real e => Ord (DisplayDecimal e)
forall e. Real e => DisplayDecimal e -> Rational
toRational :: DisplayDecimal e -> Rational
$ctoRational :: forall e. Real e => DisplayDecimal e -> Rational
Real, Int -> DisplayDecimal e
DisplayDecimal e -> Int
DisplayDecimal e -> [DisplayDecimal e]
DisplayDecimal e -> DisplayDecimal e
DisplayDecimal e -> DisplayDecimal e -> [DisplayDecimal e]
DisplayDecimal e
-> DisplayDecimal e -> DisplayDecimal e -> [DisplayDecimal e]
forall e. Enum e => Int -> DisplayDecimal e
forall e. Enum e => DisplayDecimal e -> Int
forall e. Enum e => DisplayDecimal e -> [DisplayDecimal e]
forall e. Enum e => DisplayDecimal e -> DisplayDecimal e
forall e.
Enum e =>
DisplayDecimal e -> DisplayDecimal e -> [DisplayDecimal e]
forall e.
Enum e =>
DisplayDecimal e
-> DisplayDecimal e -> DisplayDecimal e -> [DisplayDecimal e]
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: DisplayDecimal e
-> DisplayDecimal e -> DisplayDecimal e -> [DisplayDecimal e]
$cenumFromThenTo :: forall e.
Enum e =>
DisplayDecimal e
-> DisplayDecimal e -> DisplayDecimal e -> [DisplayDecimal e]
enumFromTo :: DisplayDecimal e -> DisplayDecimal e -> [DisplayDecimal e]
$cenumFromTo :: forall e.
Enum e =>
DisplayDecimal e -> DisplayDecimal e -> [DisplayDecimal e]
enumFromThen :: DisplayDecimal e -> DisplayDecimal e -> [DisplayDecimal e]
$cenumFromThen :: forall e.
Enum e =>
DisplayDecimal e -> DisplayDecimal e -> [DisplayDecimal e]
enumFrom :: DisplayDecimal e -> [DisplayDecimal e]
$cenumFrom :: forall e. Enum e => DisplayDecimal e -> [DisplayDecimal e]
fromEnum :: DisplayDecimal e -> Int
$cfromEnum :: forall e. Enum e => DisplayDecimal e -> Int
toEnum :: Int -> DisplayDecimal e
$ctoEnum :: forall e. Enum e => Int -> DisplayDecimal e
pred :: DisplayDecimal e -> DisplayDecimal e
$cpred :: forall e. Enum e => DisplayDecimal e -> DisplayDecimal e
succ :: DisplayDecimal e -> DisplayDecimal e
$csucc :: forall e. Enum e => DisplayDecimal e -> DisplayDecimal e
Enum, DisplayDecimal e -> DisplayDecimal e -> Bool
DisplayDecimal e -> DisplayDecimal e -> Ordering
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
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 {e}. Ord e => Eq (DisplayDecimal e)
forall e. Ord e => DisplayDecimal e -> DisplayDecimal e -> Bool
forall e. Ord e => DisplayDecimal e -> DisplayDecimal e -> Ordering
forall e.
Ord e =>
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
min :: DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
$cmin :: forall e.
Ord e =>
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
max :: DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
$cmax :: forall e.
Ord e =>
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
>= :: DisplayDecimal e -> DisplayDecimal e -> Bool
$c>= :: forall e. Ord e => DisplayDecimal e -> DisplayDecimal e -> Bool
> :: DisplayDecimal e -> DisplayDecimal e -> Bool
$c> :: forall e. Ord e => DisplayDecimal e -> DisplayDecimal e -> Bool
<= :: DisplayDecimal e -> DisplayDecimal e -> Bool
$c<= :: forall e. Ord e => DisplayDecimal e -> DisplayDecimal e -> Bool
< :: DisplayDecimal e -> DisplayDecimal e -> Bool
$c< :: forall e. Ord e => DisplayDecimal e -> DisplayDecimal e -> Bool
compare :: DisplayDecimal e -> DisplayDecimal e -> Ordering
$ccompare :: forall e. Ord e => DisplayDecimal e -> DisplayDecimal e -> Ordering
Ord, Integer -> DisplayDecimal e
DisplayDecimal e -> DisplayDecimal e
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
forall e. Num e => Integer -> DisplayDecimal e
forall e. Num e => DisplayDecimal e -> DisplayDecimal e
forall e.
Num e =>
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
fromInteger :: Integer -> DisplayDecimal e
$cfromInteger :: forall e. Num e => Integer -> DisplayDecimal e
signum :: DisplayDecimal e -> DisplayDecimal e
$csignum :: forall e. Num e => DisplayDecimal e -> DisplayDecimal e
abs :: DisplayDecimal e -> DisplayDecimal e
$cabs :: forall e. Num e => DisplayDecimal e -> DisplayDecimal e
negate :: DisplayDecimal e -> DisplayDecimal e
$cnegate :: forall e. Num e => DisplayDecimal e -> DisplayDecimal e
* :: DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
$c* :: forall e.
Num e =>
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
- :: DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
$c- :: forall e.
Num e =>
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
+ :: DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
$c+ :: forall e.
Num e =>
DisplayDecimal e -> DisplayDecimal e -> DisplayDecimal e
Num, DisplayDecimal e -> DisplayDecimal e -> Bool
forall e. Eq e => DisplayDecimal e -> DisplayDecimal e -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DisplayDecimal e -> DisplayDecimal e -> Bool
$c/= :: forall e. Eq e => DisplayDecimal e -> DisplayDecimal e -> Bool
== :: DisplayDecimal e -> DisplayDecimal e -> Bool
$c== :: forall e. Eq e => DisplayDecimal e -> DisplayDecimal e -> Bool
Eq)
instance Integral e => Display (DisplayDecimal e) where
displayBuilder :: DisplayDecimal e -> Builder
displayBuilder = forall a. Integral a => a -> Builder
TB.decimal
newtype DisplayRealFloat e
= DisplayRealFloat e
deriving newtype
(Int -> DisplayRealFloat e -> DisplayRealFloat e
Integer -> Int -> DisplayRealFloat e
DisplayRealFloat e -> Bool
DisplayRealFloat e -> Int
DisplayRealFloat e -> Integer
DisplayRealFloat e -> (Int, Int)
DisplayRealFloat e -> (Integer, Int)
DisplayRealFloat e -> DisplayRealFloat e
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
forall {e}. RealFloat e => Floating (DisplayRealFloat e)
forall {e}. RealFloat e => RealFrac (DisplayRealFloat e)
forall e.
RealFloat e =>
Int -> DisplayRealFloat e -> DisplayRealFloat e
forall e. RealFloat e => Integer -> Int -> DisplayRealFloat e
forall e. RealFloat e => DisplayRealFloat e -> Bool
forall e. RealFloat e => DisplayRealFloat e -> Int
forall e. RealFloat e => DisplayRealFloat e -> Integer
forall e. RealFloat e => DisplayRealFloat e -> (Int, Int)
forall e. RealFloat e => DisplayRealFloat e -> (Integer, Int)
forall e. RealFloat e => DisplayRealFloat e -> DisplayRealFloat e
forall e.
RealFloat e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
forall a.
RealFrac a
-> Floating a
-> (a -> Integer)
-> (a -> Int)
-> (a -> (Int, Int))
-> (a -> (Integer, Int))
-> (Integer -> Int -> a)
-> (a -> Int)
-> (a -> a)
-> (Int -> a -> a)
-> (a -> Bool)
-> (a -> Bool)
-> (a -> Bool)
-> (a -> Bool)
-> (a -> Bool)
-> (a -> a -> a)
-> RealFloat a
atan2 :: DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
$catan2 :: forall e.
RealFloat e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
isIEEE :: DisplayRealFloat e -> Bool
$cisIEEE :: forall e. RealFloat e => DisplayRealFloat e -> Bool
isNegativeZero :: DisplayRealFloat e -> Bool
$cisNegativeZero :: forall e. RealFloat e => DisplayRealFloat e -> Bool
isDenormalized :: DisplayRealFloat e -> Bool
$cisDenormalized :: forall e. RealFloat e => DisplayRealFloat e -> Bool
isInfinite :: DisplayRealFloat e -> Bool
$cisInfinite :: forall e. RealFloat e => DisplayRealFloat e -> Bool
isNaN :: DisplayRealFloat e -> Bool
$cisNaN :: forall e. RealFloat e => DisplayRealFloat e -> Bool
scaleFloat :: Int -> DisplayRealFloat e -> DisplayRealFloat e
$cscaleFloat :: forall e.
RealFloat e =>
Int -> DisplayRealFloat e -> DisplayRealFloat e
significand :: DisplayRealFloat e -> DisplayRealFloat e
$csignificand :: forall e. RealFloat e => DisplayRealFloat e -> DisplayRealFloat e
exponent :: DisplayRealFloat e -> Int
$cexponent :: forall e. RealFloat e => DisplayRealFloat e -> Int
encodeFloat :: Integer -> Int -> DisplayRealFloat e
$cencodeFloat :: forall e. RealFloat e => Integer -> Int -> DisplayRealFloat e
decodeFloat :: DisplayRealFloat e -> (Integer, Int)
$cdecodeFloat :: forall e. RealFloat e => DisplayRealFloat e -> (Integer, Int)
floatRange :: DisplayRealFloat e -> (Int, Int)
$cfloatRange :: forall e. RealFloat e => DisplayRealFloat e -> (Int, Int)
floatDigits :: DisplayRealFloat e -> Int
$cfloatDigits :: forall e. RealFloat e => DisplayRealFloat e -> Int
floatRadix :: DisplayRealFloat e -> Integer
$cfloatRadix :: forall e. RealFloat e => DisplayRealFloat e -> Integer
RealFloat, forall b. Integral b => DisplayRealFloat e -> b
forall b.
Integral b =>
DisplayRealFloat e -> (b, DisplayRealFloat e)
forall a.
Real a
-> Fractional a
-> (forall b. Integral b => a -> (b, a))
-> (forall b. Integral b => a -> b)
-> (forall b. Integral b => a -> b)
-> (forall b. Integral b => a -> b)
-> (forall b. Integral b => a -> b)
-> RealFrac a
forall {e}. RealFrac e => Fractional (DisplayRealFloat e)
forall {e}. RealFrac e => Real (DisplayRealFloat e)
forall e b. (RealFrac e, Integral b) => DisplayRealFloat e -> b
forall e b.
(RealFrac e, Integral b) =>
DisplayRealFloat e -> (b, DisplayRealFloat e)
floor :: forall b. Integral b => DisplayRealFloat e -> b
$cfloor :: forall e b. (RealFrac e, Integral b) => DisplayRealFloat e -> b
ceiling :: forall b. Integral b => DisplayRealFloat e -> b
$cceiling :: forall e b. (RealFrac e, Integral b) => DisplayRealFloat e -> b
round :: forall b. Integral b => DisplayRealFloat e -> b
$cround :: forall e b. (RealFrac e, Integral b) => DisplayRealFloat e -> b
truncate :: forall b. Integral b => DisplayRealFloat e -> b
$ctruncate :: forall e b. (RealFrac e, Integral b) => DisplayRealFloat e -> b
properFraction :: forall b.
Integral b =>
DisplayRealFloat e -> (b, DisplayRealFloat e)
$cproperFraction :: forall e b.
(RealFrac e, Integral b) =>
DisplayRealFloat e -> (b, DisplayRealFloat e)
RealFrac, DisplayRealFloat e -> Rational
forall a. Num a -> Ord a -> (a -> Rational) -> Real a
forall {e}. Real e => Num (DisplayRealFloat e)
forall {e}. Real e => Ord (DisplayRealFloat e)
forall e. Real e => DisplayRealFloat e -> Rational
toRational :: DisplayRealFloat e -> Rational
$ctoRational :: forall e. Real e => DisplayRealFloat e -> Rational
Real, DisplayRealFloat e -> DisplayRealFloat e -> Bool
DisplayRealFloat e -> DisplayRealFloat e -> Ordering
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
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 {e}. Ord e => Eq (DisplayRealFloat e)
forall e. Ord e => DisplayRealFloat e -> DisplayRealFloat e -> Bool
forall e.
Ord e =>
DisplayRealFloat e -> DisplayRealFloat e -> Ordering
forall e.
Ord e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
min :: DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
$cmin :: forall e.
Ord e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
max :: DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
$cmax :: forall e.
Ord e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
>= :: DisplayRealFloat e -> DisplayRealFloat e -> Bool
$c>= :: forall e. Ord e => DisplayRealFloat e -> DisplayRealFloat e -> Bool
> :: DisplayRealFloat e -> DisplayRealFloat e -> Bool
$c> :: forall e. Ord e => DisplayRealFloat e -> DisplayRealFloat e -> Bool
<= :: DisplayRealFloat e -> DisplayRealFloat e -> Bool
$c<= :: forall e. Ord e => DisplayRealFloat e -> DisplayRealFloat e -> Bool
< :: DisplayRealFloat e -> DisplayRealFloat e -> Bool
$c< :: forall e. Ord e => DisplayRealFloat e -> DisplayRealFloat e -> Bool
compare :: DisplayRealFloat e -> DisplayRealFloat e -> Ordering
$ccompare :: forall e.
Ord e =>
DisplayRealFloat e -> DisplayRealFloat e -> Ordering
Ord, DisplayRealFloat e -> DisplayRealFloat e -> Bool
forall e. Eq e => DisplayRealFloat e -> DisplayRealFloat e -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DisplayRealFloat e -> DisplayRealFloat e -> Bool
$c/= :: forall e. Eq e => DisplayRealFloat e -> DisplayRealFloat e -> Bool
== :: DisplayRealFloat e -> DisplayRealFloat e -> Bool
$c== :: forall e. Eq e => DisplayRealFloat e -> DisplayRealFloat e -> Bool
Eq, Integer -> DisplayRealFloat e
DisplayRealFloat e -> DisplayRealFloat e
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
forall e. Num e => Integer -> DisplayRealFloat e
forall e. Num e => DisplayRealFloat e -> DisplayRealFloat e
forall e.
Num e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
fromInteger :: Integer -> DisplayRealFloat e
$cfromInteger :: forall e. Num e => Integer -> DisplayRealFloat e
signum :: DisplayRealFloat e -> DisplayRealFloat e
$csignum :: forall e. Num e => DisplayRealFloat e -> DisplayRealFloat e
abs :: DisplayRealFloat e -> DisplayRealFloat e
$cabs :: forall e. Num e => DisplayRealFloat e -> DisplayRealFloat e
negate :: DisplayRealFloat e -> DisplayRealFloat e
$cnegate :: forall e. Num e => DisplayRealFloat e -> DisplayRealFloat e
* :: DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
$c* :: forall e.
Num e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
- :: DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
$c- :: forall e.
Num e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
+ :: DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
$c+ :: forall e.
Num e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
Num, Rational -> DisplayRealFloat e
DisplayRealFloat e -> DisplayRealFloat e
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
forall {e}. Fractional e => Num (DisplayRealFloat e)
forall e. Fractional e => Rational -> DisplayRealFloat e
forall e. Fractional e => DisplayRealFloat e -> DisplayRealFloat e
forall e.
Fractional e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
forall a.
Num a
-> (a -> a -> a) -> (a -> a) -> (Rational -> a) -> Fractional a
fromRational :: Rational -> DisplayRealFloat e
$cfromRational :: forall e. Fractional e => Rational -> DisplayRealFloat e
recip :: DisplayRealFloat e -> DisplayRealFloat e
$crecip :: forall e. Fractional e => DisplayRealFloat e -> DisplayRealFloat e
/ :: DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
$c/ :: forall e.
Fractional e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
Fractional, DisplayRealFloat e
DisplayRealFloat e -> DisplayRealFloat e
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
forall {e}. Floating e => Fractional (DisplayRealFloat e)
forall e. Floating e => DisplayRealFloat e
forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
forall e.
Floating e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
forall a.
Fractional a
-> a
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> Floating a
log1mexp :: DisplayRealFloat e -> DisplayRealFloat e
$clog1mexp :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
log1pexp :: DisplayRealFloat e -> DisplayRealFloat e
$clog1pexp :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
expm1 :: DisplayRealFloat e -> DisplayRealFloat e
$cexpm1 :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
log1p :: DisplayRealFloat e -> DisplayRealFloat e
$clog1p :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
atanh :: DisplayRealFloat e -> DisplayRealFloat e
$catanh :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
acosh :: DisplayRealFloat e -> DisplayRealFloat e
$cacosh :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
asinh :: DisplayRealFloat e -> DisplayRealFloat e
$casinh :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
tanh :: DisplayRealFloat e -> DisplayRealFloat e
$ctanh :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
cosh :: DisplayRealFloat e -> DisplayRealFloat e
$ccosh :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
sinh :: DisplayRealFloat e -> DisplayRealFloat e
$csinh :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
atan :: DisplayRealFloat e -> DisplayRealFloat e
$catan :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
acos :: DisplayRealFloat e -> DisplayRealFloat e
$cacos :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
asin :: DisplayRealFloat e -> DisplayRealFloat e
$casin :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
tan :: DisplayRealFloat e -> DisplayRealFloat e
$ctan :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
cos :: DisplayRealFloat e -> DisplayRealFloat e
$ccos :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
sin :: DisplayRealFloat e -> DisplayRealFloat e
$csin :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
logBase :: DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
$clogBase :: forall e.
Floating e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
** :: DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
$c** :: forall e.
Floating e =>
DisplayRealFloat e -> DisplayRealFloat e -> DisplayRealFloat e
sqrt :: DisplayRealFloat e -> DisplayRealFloat e
$csqrt :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
log :: DisplayRealFloat e -> DisplayRealFloat e
$clog :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
exp :: DisplayRealFloat e -> DisplayRealFloat e
$cexp :: forall e. Floating e => DisplayRealFloat e -> DisplayRealFloat e
pi :: DisplayRealFloat e
$cpi :: forall e. Floating e => DisplayRealFloat e
Floating)
instance RealFloat e => Display (DisplayRealFloat e) where
displayBuilder :: DisplayRealFloat e -> Builder
displayBuilder = forall a. RealFloat a => a -> Builder
TB.realFloat
deriving via (ShowInstance ()) instance Display ()
deriving via (ShowInstance Void) instance Display Void
deriving via (ShowInstance Bool) instance Display Bool
instance Display Char where
displayBuilder :: Char -> Builder
displayBuilder Char
c = Text -> Builder
TB.fromText forall a b. (a -> b) -> a -> b
$ Char -> Text
T.singleton Char
c
displayList :: String -> Builder
displayList String
cs = Text -> Builder
TB.fromText forall a b. (a -> b) -> a -> b
$ String -> Text
T.pack String
cs
instance Display TL.Text where
displayBuilder :: Text -> Builder
displayBuilder = Text -> Builder
TB.fromLazyText
instance Display Text where
displayBuilder :: Text -> Builder
displayBuilder = Text -> Builder
TB.fromText
instance Display a => Display [a] where
{-# SPECIALIZE instance Display [String] #-}
{-# SPECIALIZE instance Display [Char] #-}
{-# SPECIALIZE instance Display [Int] #-}
displayBuilder :: [a] -> Builder
displayBuilder = forall a. Display a => [a] -> Builder
displayList
instance Display a => Display (NonEmpty a) where
displayBuilder :: NonEmpty a -> Builder
displayBuilder (a
a :| [a]
as) = forall a. Display a => a -> Builder
displayBuilder a
a forall a. Semigroup a => a -> a -> a
<> String -> Builder
TB.fromString String
" :| " forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Builder
displayBuilder [a]
as
instance Display a => Display (Maybe a) where
displayPrec :: Int -> Maybe a -> Builder
displayPrec Int
_ Maybe a
Nothing = Builder
"Nothing"
displayPrec Int
prec (Just a
a) = Bool -> Builder -> Builder
displayParen (Int
prec forall a. Ord a => a -> a -> Bool
> Int
10) forall a b. (a -> b) -> a -> b
$ Builder
"Just " forall a. Semigroup a => a -> a -> a
<> forall a. Display a => Int -> a -> Builder
displayPrec Int
11 a
a
deriving via (DisplayRealFloat Double) instance Display Double
deriving via (DisplayRealFloat Float) instance Display Float
deriving via (DisplayDecimal Int) instance Display Int
deriving via (DisplayDecimal Int8) instance Display Int8
deriving via (DisplayDecimal Int16) instance Display Int16
deriving via (DisplayDecimal Int32) instance Display Int32
deriving via (DisplayDecimal Int64) instance Display Int64
deriving via (DisplayDecimal Integer) instance Display Integer
deriving via (DisplayDecimal Word) instance Display Word
deriving via (DisplayDecimal Word8) instance Display Word8
deriving via (DisplayDecimal Word16) instance Display Word16
deriving via (DisplayDecimal Word32) instance Display Word32
deriving via (DisplayDecimal Word64) instance Display Word64
deriving via (ShowInstance IOException) instance Display IOException
deriving via (ShowInstance SomeException) instance Display SomeException
instance (Display a, Display b) => Display (a, b) where
displayBuilder :: (a, b) -> Builder
displayBuilder (a
a, b
b) = Builder
"(" forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Builder
displayBuilder a
a forall a. Semigroup a => a -> a -> a
<> Builder
"," forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Builder
displayBuilder b
b forall a. Semigroup a => a -> a -> a
<> Builder
")"
instance (Display a, Display b, Display c) => Display (a, b, c) where
displayBuilder :: (a, b, c) -> Builder
displayBuilder (a
a, b
b, c
c) = Builder
"(" forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Builder
displayBuilder a
a forall a. Semigroup a => a -> a -> a
<> Builder
"," forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Builder
displayBuilder b
b forall a. Semigroup a => a -> a -> a
<> Builder
"," forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Builder
displayBuilder c
c forall a. Semigroup a => a -> a -> a
<> Builder
")"
instance (Display a, Display b, Display c, Display d) => Display (a, b, c, d) where
displayBuilder :: (a, b, c, d) -> Builder
displayBuilder (a
a, b
b, c
c, d
d) = Builder
"(" forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Builder
displayBuilder a
a forall a. Semigroup a => a -> a -> a
<> Builder
"," forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Builder
displayBuilder b
b forall a. Semigroup a => a -> a -> a
<> Builder
"," forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Builder
displayBuilder c
c forall a. Semigroup a => a -> a -> a
<> Builder
"," forall a. Semigroup a => a -> a -> a
<> forall a. Display a => a -> Builder
displayBuilder d
d forall a. Semigroup a => a -> a -> a
<> Builder
")"