{-# LANGUAGE CPP, DeriveDataTypeable #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE TypeFamilies #-}
module HsLit where
#include "HsVersions.h"
import GhcPrelude
import {-# SOURCE #-} HsExpr( HsExpr, pprExpr )
import BasicTypes ( IntegralLit(..),FractionalLit(..),negateIntegralLit,
negateFractionalLit,SourceText(..),pprWithSourceText )
import Type
import Outputable
import FastString
import HsExtension
import Data.ByteString (ByteString)
import Data.Data hiding ( Fixity )
data HsLit x
= HsChar (XHsChar x) Char
| HsCharPrim (XHsCharPrim x) Char
| HsString (XHsString x) FastString
| HsStringPrim (XHsStringPrim x) ByteString
| HsInt (XHsInt x) IntegralLit
| HsIntPrim (XHsIntPrim x) Integer
| HsWordPrim (XHsWordPrim x) Integer
| HsInt64Prim (XHsInt64Prim x) Integer
| HsWord64Prim (XHsWord64Prim x) Integer
| HsInteger (XHsInteger x) Integer Type
| HsRat (XHsRat x) FractionalLit Type
| HsFloatPrim (XHsFloatPrim x) FractionalLit
| HsDoublePrim (XHsDoublePrim x) FractionalLit
| XLit (XXLit x)
type instance XHsChar (GhcPass _) = SourceText
type instance XHsCharPrim (GhcPass _) = SourceText
type instance XHsString (GhcPass _) = SourceText
type instance XHsStringPrim (GhcPass _) = SourceText
type instance XHsInt (GhcPass _) = NoExt
type instance XHsIntPrim (GhcPass _) = SourceText
type instance XHsWordPrim (GhcPass _) = SourceText
type instance XHsInt64Prim (GhcPass _) = SourceText
type instance XHsWord64Prim (GhcPass _) = SourceText
type instance XHsInteger (GhcPass _) = SourceText
type instance XHsRat (GhcPass _) = NoExt
type instance XHsFloatPrim (GhcPass _) = NoExt
type instance XHsDoublePrim (GhcPass _) = NoExt
type instance XXLit (GhcPass _) = NoExt
instance Eq (HsLit x) where
(HsChar _ x1 :: Char
x1) == :: HsLit x -> HsLit x -> Bool
== (HsChar _ x2 :: Char
x2) = Char
x1Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==Char
x2
(HsCharPrim _ x1 :: Char
x1) == (HsCharPrim _ x2 :: Char
x2) = Char
x1Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==Char
x2
(HsString _ x1 :: FastString
x1) == (HsString _ x2 :: FastString
x2) = FastString
x1FastString -> FastString -> Bool
forall a. Eq a => a -> a -> Bool
==FastString
x2
(HsStringPrim _ x1 :: ByteString
x1) == (HsStringPrim _ x2 :: ByteString
x2) = ByteString
x1ByteString -> ByteString -> Bool
forall a. Eq a => a -> a -> Bool
==ByteString
x2
(HsInt _ x1 :: IntegralLit
x1) == (HsInt _ x2 :: IntegralLit
x2) = IntegralLit
x1IntegralLit -> IntegralLit -> Bool
forall a. Eq a => a -> a -> Bool
==IntegralLit
x2
(HsIntPrim _ x1 :: Integer
x1) == (HsIntPrim _ x2 :: Integer
x2) = Integer
x1Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
==Integer
x2
(HsWordPrim _ x1 :: Integer
x1) == (HsWordPrim _ x2 :: Integer
x2) = Integer
x1Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
==Integer
x2
(HsInt64Prim _ x1 :: Integer
x1) == (HsInt64Prim _ x2 :: Integer
x2) = Integer
x1Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
==Integer
x2
(HsWord64Prim _ x1 :: Integer
x1) == (HsWord64Prim _ x2 :: Integer
x2) = Integer
x1Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
==Integer
x2
(HsInteger _ x1 :: Integer
x1 _) == (HsInteger _ x2 :: Integer
x2 _) = Integer
x1Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
==Integer
x2
(HsRat _ x1 :: FractionalLit
x1 _) == (HsRat _ x2 :: FractionalLit
x2 _) = FractionalLit
x1FractionalLit -> FractionalLit -> Bool
forall a. Eq a => a -> a -> Bool
==FractionalLit
x2
(HsFloatPrim _ x1 :: FractionalLit
x1) == (HsFloatPrim _ x2 :: FractionalLit
x2) = FractionalLit
x1FractionalLit -> FractionalLit -> Bool
forall a. Eq a => a -> a -> Bool
==FractionalLit
x2
(HsDoublePrim _ x1 :: FractionalLit
x1) == (HsDoublePrim _ x2 :: FractionalLit
x2) = FractionalLit
x1FractionalLit -> FractionalLit -> Bool
forall a. Eq a => a -> a -> Bool
==FractionalLit
x2
_ == _ = Bool
False
data HsOverLit p
= OverLit {
HsOverLit p -> XOverLit p
ol_ext :: (XOverLit p),
HsOverLit p -> OverLitVal
ol_val :: OverLitVal,
HsOverLit p -> HsExpr p
ol_witness :: HsExpr p}
| XOverLit
(XXOverLit p)
data OverLitTc
= OverLitTc {
OverLitTc -> Bool
ol_rebindable :: Bool,
OverLitTc -> Type
ol_type :: Type }
deriving Typeable OverLitTc
DataType
Constr
Typeable OverLitTc =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OverLitTc -> c OverLitTc)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OverLitTc)
-> (OverLitTc -> Constr)
-> (OverLitTc -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OverLitTc))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OverLitTc))
-> ((forall b. Data b => b -> b) -> OverLitTc -> OverLitTc)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitTc -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitTc -> r)
-> (forall u. (forall d. Data d => d -> u) -> OverLitTc -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> OverLitTc -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OverLitTc -> m OverLitTc)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OverLitTc -> m OverLitTc)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OverLitTc -> m OverLitTc)
-> Data OverLitTc
OverLitTc -> DataType
OverLitTc -> Constr
(forall b. Data b => b -> b) -> OverLitTc -> OverLitTc
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OverLitTc -> c OverLitTc
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OverLitTc
forall a.
Typeable a =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> OverLitTc -> u
forall u. (forall d. Data d => d -> u) -> OverLitTc -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitTc -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitTc -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OverLitTc -> m OverLitTc
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OverLitTc -> m OverLitTc
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OverLitTc
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OverLitTc -> c OverLitTc
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OverLitTc)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OverLitTc)
$cOverLitTc :: Constr
$tOverLitTc :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> OverLitTc -> m OverLitTc
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OverLitTc -> m OverLitTc
gmapMp :: (forall d. Data d => d -> m d) -> OverLitTc -> m OverLitTc
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OverLitTc -> m OverLitTc
gmapM :: (forall d. Data d => d -> m d) -> OverLitTc -> m OverLitTc
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OverLitTc -> m OverLitTc
gmapQi :: Int -> (forall d. Data d => d -> u) -> OverLitTc -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> OverLitTc -> u
gmapQ :: (forall d. Data d => d -> u) -> OverLitTc -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> OverLitTc -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitTc -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitTc -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitTc -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitTc -> r
gmapT :: (forall b. Data b => b -> b) -> OverLitTc -> OverLitTc
$cgmapT :: (forall b. Data b => b -> b) -> OverLitTc -> OverLitTc
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OverLitTc)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OverLitTc)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c OverLitTc)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OverLitTc)
dataTypeOf :: OverLitTc -> DataType
$cdataTypeOf :: OverLitTc -> DataType
toConstr :: OverLitTc -> Constr
$ctoConstr :: OverLitTc -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OverLitTc
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OverLitTc
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OverLitTc -> c OverLitTc
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OverLitTc -> c OverLitTc
$cp1Data :: Typeable OverLitTc
Data
type instance XOverLit GhcPs = NoExt
type instance XOverLit GhcRn = Bool
type instance XOverLit GhcTc = OverLitTc
type instance XXOverLit (GhcPass _) = NoExt
data OverLitVal
= HsIntegral !IntegralLit
| HsFractional !FractionalLit
| HsIsString !SourceText !FastString
deriving Typeable OverLitVal
DataType
Constr
Typeable OverLitVal =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OverLitVal -> c OverLitVal)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OverLitVal)
-> (OverLitVal -> Constr)
-> (OverLitVal -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OverLitVal))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c OverLitVal))
-> ((forall b. Data b => b -> b) -> OverLitVal -> OverLitVal)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitVal -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitVal -> r)
-> (forall u. (forall d. Data d => d -> u) -> OverLitVal -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> OverLitVal -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OverLitVal -> m OverLitVal)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OverLitVal -> m OverLitVal)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OverLitVal -> m OverLitVal)
-> Data OverLitVal
OverLitVal -> DataType
OverLitVal -> Constr
(forall b. Data b => b -> b) -> OverLitVal -> OverLitVal
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OverLitVal -> c OverLitVal
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OverLitVal
forall a.
Typeable a =>
(forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> a -> c a)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c a)
-> (a -> Constr)
-> (a -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c a))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a))
-> ((forall b. Data b => b -> b) -> a -> a)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r)
-> (forall u. (forall d. Data d => d -> u) -> a -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> a -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> a -> m a)
-> Data a
forall u. Int -> (forall d. Data d => d -> u) -> OverLitVal -> u
forall u. (forall d. Data d => d -> u) -> OverLitVal -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitVal -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitVal -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OverLitVal -> m OverLitVal
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OverLitVal -> m OverLitVal
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OverLitVal
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OverLitVal -> c OverLitVal
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OverLitVal)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OverLitVal)
$cHsIsString :: Constr
$cHsFractional :: Constr
$cHsIntegral :: Constr
$tOverLitVal :: DataType
gmapMo :: (forall d. Data d => d -> m d) -> OverLitVal -> m OverLitVal
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OverLitVal -> m OverLitVal
gmapMp :: (forall d. Data d => d -> m d) -> OverLitVal -> m OverLitVal
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> OverLitVal -> m OverLitVal
gmapM :: (forall d. Data d => d -> m d) -> OverLitVal -> m OverLitVal
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> OverLitVal -> m OverLitVal
gmapQi :: Int -> (forall d. Data d => d -> u) -> OverLitVal -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> OverLitVal -> u
gmapQ :: (forall d. Data d => d -> u) -> OverLitVal -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> OverLitVal -> [u]
gmapQr :: (r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitVal -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitVal -> r
gmapQl :: (r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitVal -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> OverLitVal -> r
gmapT :: (forall b. Data b => b -> b) -> OverLitVal -> OverLitVal
$cgmapT :: (forall b. Data b => b -> b) -> OverLitVal -> OverLitVal
dataCast2 :: (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OverLitVal)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c OverLitVal)
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c OverLitVal)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c OverLitVal)
dataTypeOf :: OverLitVal -> DataType
$cdataTypeOf :: OverLitVal -> DataType
toConstr :: OverLitVal -> Constr
$ctoConstr :: OverLitVal -> Constr
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OverLitVal
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c OverLitVal
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OverLitVal -> c OverLitVal
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> OverLitVal -> c OverLitVal
$cp1Data :: Typeable OverLitVal
Data
negateOverLitVal :: OverLitVal -> OverLitVal
negateOverLitVal :: OverLitVal -> OverLitVal
negateOverLitVal (HsIntegral i :: IntegralLit
i) = IntegralLit -> OverLitVal
HsIntegral (IntegralLit -> IntegralLit
negateIntegralLit IntegralLit
i)
negateOverLitVal (HsFractional f :: FractionalLit
f) = FractionalLit -> OverLitVal
HsFractional (FractionalLit -> FractionalLit
negateFractionalLit FractionalLit
f)
negateOverLitVal _ = String -> OverLitVal
forall a. String -> a
panic "negateOverLitVal: argument is not a number"
overLitType :: HsOverLit GhcTc -> Type
overLitType :: HsOverLit GhcTc -> Type
overLitType (OverLit (OverLitTc _ ty) _ _) = Type
ty
overLitType XOverLit{} = String -> Type
forall a. String -> a
panic "overLitType"
convertLit :: (ConvertIdX a b) => HsLit a -> HsLit b
convertLit :: HsLit a -> HsLit b
convertLit (HsChar a :: XHsChar a
a x :: Char
x) = (XHsChar b -> Char -> HsLit b
forall x. XHsChar x -> Char -> HsLit x
HsChar (XHsChar b -> XHsChar b
forall a b. Convertable a b => a -> b
convert XHsChar a
XHsChar b
a) Char
x)
convertLit (HsCharPrim a :: XHsCharPrim a
a x :: Char
x) = (XHsCharPrim b -> Char -> HsLit b
forall x. XHsCharPrim x -> Char -> HsLit x
HsCharPrim (XHsCharPrim b -> XHsCharPrim b
forall a b. Convertable a b => a -> b
convert XHsCharPrim a
XHsCharPrim b
a) Char
x)
convertLit (HsString a :: XHsString a
a x :: FastString
x) = (XHsString b -> FastString -> HsLit b
forall x. XHsString x -> FastString -> HsLit x
HsString (XHsString b -> XHsString b
forall a b. Convertable a b => a -> b
convert XHsString a
XHsString b
a) FastString
x)
convertLit (HsStringPrim a :: XHsStringPrim a
a x :: ByteString
x) = (XHsStringPrim b -> ByteString -> HsLit b
forall x. XHsStringPrim x -> ByteString -> HsLit x
HsStringPrim (XHsStringPrim b -> XHsStringPrim b
forall a b. Convertable a b => a -> b
convert XHsStringPrim a
XHsStringPrim b
a) ByteString
x)
convertLit (HsInt a :: XHsInt a
a x :: IntegralLit
x) = (XHsInt b -> IntegralLit -> HsLit b
forall x. XHsInt x -> IntegralLit -> HsLit x
HsInt (XHsInt b -> XHsInt b
forall a b. Convertable a b => a -> b
convert XHsInt a
XHsInt b
a) IntegralLit
x)
convertLit (HsIntPrim a :: XHsIntPrim a
a x :: Integer
x) = (XHsIntPrim b -> Integer -> HsLit b
forall x. XHsIntPrim x -> Integer -> HsLit x
HsIntPrim (XHsIntPrim b -> XHsIntPrim b
forall a b. Convertable a b => a -> b
convert XHsIntPrim a
XHsIntPrim b
a) Integer
x)
convertLit (HsWordPrim a :: XHsWordPrim a
a x :: Integer
x) = (XHsWordPrim b -> Integer -> HsLit b
forall x. XHsWordPrim x -> Integer -> HsLit x
HsWordPrim (XHsWordPrim b -> XHsWordPrim b
forall a b. Convertable a b => a -> b
convert XHsWordPrim a
XHsWordPrim b
a) Integer
x)
convertLit (HsInt64Prim a :: XHsInt64Prim a
a x :: Integer
x) = (XHsInt64Prim b -> Integer -> HsLit b
forall x. XHsInt64Prim x -> Integer -> HsLit x
HsInt64Prim (XHsInt64Prim b -> XHsInt64Prim b
forall a b. Convertable a b => a -> b
convert XHsInt64Prim a
XHsInt64Prim b
a) Integer
x)
convertLit (HsWord64Prim a :: XHsWord64Prim a
a x :: Integer
x) = (XHsWord64Prim b -> Integer -> HsLit b
forall x. XHsWord64Prim x -> Integer -> HsLit x
HsWord64Prim (XHsWord64Prim b -> XHsWord64Prim b
forall a b. Convertable a b => a -> b
convert XHsWord64Prim a
XHsWord64Prim b
a) Integer
x)
convertLit (HsInteger a :: XHsInteger a
a x :: Integer
x b :: Type
b) = (XHsInteger b -> Integer -> Type -> HsLit b
forall x. XHsInteger x -> Integer -> Type -> HsLit x
HsInteger (XHsInteger b -> XHsInteger b
forall a b. Convertable a b => a -> b
convert XHsInteger a
XHsInteger b
a) Integer
x Type
b)
convertLit (HsRat a :: XHsRat a
a x :: FractionalLit
x b :: Type
b) = (XHsRat b -> FractionalLit -> Type -> HsLit b
forall x. XHsRat x -> FractionalLit -> Type -> HsLit x
HsRat (XHsRat b -> XHsRat b
forall a b. Convertable a b => a -> b
convert XHsRat a
XHsRat b
a) FractionalLit
x Type
b)
convertLit (HsFloatPrim a :: XHsFloatPrim a
a x :: FractionalLit
x) = (XHsFloatPrim b -> FractionalLit -> HsLit b
forall x. XHsFloatPrim x -> FractionalLit -> HsLit x
HsFloatPrim (XHsFloatPrim b -> XHsFloatPrim b
forall a b. Convertable a b => a -> b
convert XHsFloatPrim a
XHsFloatPrim b
a) FractionalLit
x)
convertLit (HsDoublePrim a :: XHsDoublePrim a
a x :: FractionalLit
x) = (XHsDoublePrim b -> FractionalLit -> HsLit b
forall x. XHsDoublePrim x -> FractionalLit -> HsLit x
HsDoublePrim (XHsDoublePrim b -> XHsDoublePrim b
forall a b. Convertable a b => a -> b
convert XHsDoublePrim a
XHsDoublePrim b
a) FractionalLit
x)
convertLit (XLit a :: XXLit a
a) = (XXLit b -> HsLit b
forall x. XXLit x -> HsLit x
XLit (XXLit b -> XXLit b
forall a b. Convertable a b => a -> b
convert XXLit a
XXLit b
a))
instance (Eq (XXOverLit p)) => Eq (HsOverLit p) where
(OverLit _ val1 :: OverLitVal
val1 _) == :: HsOverLit p -> HsOverLit p -> Bool
== (OverLit _ val2 :: OverLitVal
val2 _) = OverLitVal
val1 OverLitVal -> OverLitVal -> Bool
forall a. Eq a => a -> a -> Bool
== OverLitVal
val2
(XOverLit val1 :: XXOverLit p
val1) == (XOverLit val2 :: XXOverLit p
val2) = XXOverLit p
val1 XXOverLit p -> XXOverLit p -> Bool
forall a. Eq a => a -> a -> Bool
== XXOverLit p
val2
_ == _ = String -> Bool
forall a. String -> a
panic "Eq HsOverLit"
instance Eq OverLitVal where
(HsIntegral i1 :: IntegralLit
i1) == :: OverLitVal -> OverLitVal -> Bool
== (HsIntegral i2 :: IntegralLit
i2) = IntegralLit
i1 IntegralLit -> IntegralLit -> Bool
forall a. Eq a => a -> a -> Bool
== IntegralLit
i2
(HsFractional f1 :: FractionalLit
f1) == (HsFractional f2 :: FractionalLit
f2) = FractionalLit
f1 FractionalLit -> FractionalLit -> Bool
forall a. Eq a => a -> a -> Bool
== FractionalLit
f2
(HsIsString _ s1 :: FastString
s1) == (HsIsString _ s2 :: FastString
s2) = FastString
s1 FastString -> FastString -> Bool
forall a. Eq a => a -> a -> Bool
== FastString
s2
_ == _ = Bool
False
instance (Ord (XXOverLit p)) => Ord (HsOverLit p) where
compare :: HsOverLit p -> HsOverLit p -> Ordering
compare (OverLit _ val1 :: OverLitVal
val1 _) (OverLit _ val2 :: OverLitVal
val2 _) = OverLitVal
val1 OverLitVal -> OverLitVal -> Ordering
forall a. Ord a => a -> a -> Ordering
`compare` OverLitVal
val2
compare (XOverLit val1 :: XXOverLit p
val1) (XOverLit val2 :: XXOverLit p
val2) = XXOverLit p
val1 XXOverLit p -> XXOverLit p -> Ordering
forall a. Ord a => a -> a -> Ordering
`compare` XXOverLit p
val2
compare _ _ = String -> Ordering
forall a. String -> a
panic "Ord HsOverLit"
instance Ord OverLitVal where
compare :: OverLitVal -> OverLitVal -> Ordering
compare (HsIntegral i1 :: IntegralLit
i1) (HsIntegral i2 :: IntegralLit
i2) = IntegralLit
i1 IntegralLit -> IntegralLit -> Ordering
forall a. Ord a => a -> a -> Ordering
`compare` IntegralLit
i2
compare (HsIntegral _) (HsFractional _) = Ordering
LT
compare (HsIntegral _) (HsIsString _ _) = Ordering
LT
compare (HsFractional f1 :: FractionalLit
f1) (HsFractional f2 :: FractionalLit
f2) = FractionalLit
f1 FractionalLit -> FractionalLit -> Ordering
forall a. Ord a => a -> a -> Ordering
`compare` FractionalLit
f2
compare (HsFractional _) (HsIntegral _) = Ordering
GT
compare (HsFractional _) (HsIsString _ _) = Ordering
LT
compare (HsIsString _ s1 :: FastString
s1) (HsIsString _ s2 :: FastString
s2) = FastString
s1 FastString -> FastString -> Ordering
forall a. Ord a => a -> a -> Ordering
`compare` FastString
s2
compare (HsIsString _ _) (HsIntegral _) = Ordering
GT
compare (HsIsString _ _) (HsFractional _) = Ordering
GT
instance p ~ GhcPass pass => Outputable (HsLit p) where
ppr :: HsLit p -> SDoc
ppr (HsChar st :: XHsChar p
st c :: Char
c) = SourceText -> SDoc -> SDoc
pprWithSourceText SourceText
XHsChar p
st (Char -> SDoc
pprHsChar Char
c)
ppr (HsCharPrim st :: XHsCharPrim p
st c :: Char
c) = SourceText -> SDoc -> SDoc -> SDoc
pp_st_suffix SourceText
XHsCharPrim p
st SDoc
primCharSuffix (Char -> SDoc
pprPrimChar Char
c)
ppr (HsString st :: XHsString p
st s :: FastString
s) = SourceText -> SDoc -> SDoc
pprWithSourceText SourceText
XHsString p
st (FastString -> SDoc
pprHsString FastString
s)
ppr (HsStringPrim st :: XHsStringPrim p
st s :: ByteString
s) = SourceText -> SDoc -> SDoc
pprWithSourceText SourceText
XHsStringPrim p
st (ByteString -> SDoc
pprHsBytes ByteString
s)
ppr (HsInt _ i :: IntegralLit
i)
= SourceText -> SDoc -> SDoc
pprWithSourceText (IntegralLit -> SourceText
il_text IntegralLit
i) (Integer -> SDoc
integer (IntegralLit -> Integer
il_value IntegralLit
i))
ppr (HsInteger st :: XHsInteger p
st i :: Integer
i _) = SourceText -> SDoc -> SDoc
pprWithSourceText SourceText
XHsInteger p
st (Integer -> SDoc
integer Integer
i)
ppr (HsRat _ f :: FractionalLit
f _) = FractionalLit -> SDoc
forall a. Outputable a => a -> SDoc
ppr FractionalLit
f
ppr (HsFloatPrim _ f :: FractionalLit
f) = FractionalLit -> SDoc
forall a. Outputable a => a -> SDoc
ppr FractionalLit
f SDoc -> SDoc -> SDoc
<> SDoc
primFloatSuffix
ppr (HsDoublePrim _ d :: FractionalLit
d) = FractionalLit -> SDoc
forall a. Outputable a => a -> SDoc
ppr FractionalLit
d SDoc -> SDoc -> SDoc
<> SDoc
primDoubleSuffix
ppr (HsIntPrim st :: XHsIntPrim p
st i :: Integer
i) = SourceText -> SDoc -> SDoc
pprWithSourceText SourceText
XHsIntPrim p
st (Integer -> SDoc
pprPrimInt Integer
i)
ppr (HsWordPrim st :: XHsWordPrim p
st w :: Integer
w) = SourceText -> SDoc -> SDoc
pprWithSourceText SourceText
XHsWordPrim p
st (Integer -> SDoc
pprPrimWord Integer
w)
ppr (HsInt64Prim st :: XHsInt64Prim p
st i :: Integer
i) = SourceText -> SDoc -> SDoc -> SDoc
pp_st_suffix SourceText
XHsInt64Prim p
st SDoc
primInt64Suffix (Integer -> SDoc
pprPrimInt64 Integer
i)
ppr (HsWord64Prim st :: XHsWord64Prim p
st w :: Integer
w) = SourceText -> SDoc -> SDoc -> SDoc
pp_st_suffix SourceText
XHsWord64Prim p
st SDoc
primWord64Suffix (Integer -> SDoc
pprPrimWord64 Integer
w)
ppr (XLit x :: XXLit p
x) = NoExt -> SDoc
forall a. Outputable a => a -> SDoc
ppr XXLit p
NoExt
x
pp_st_suffix :: SourceText -> SDoc -> SDoc -> SDoc
pp_st_suffix :: SourceText -> SDoc -> SDoc -> SDoc
pp_st_suffix NoSourceText _ doc :: SDoc
doc = SDoc
doc
pp_st_suffix (SourceText st :: String
st) suffix :: SDoc
suffix _ = String -> SDoc
text String
st SDoc -> SDoc -> SDoc
<> SDoc
suffix
instance (p ~ GhcPass pass, OutputableBndrId p)
=> Outputable (HsOverLit p) where
ppr :: HsOverLit p -> SDoc
ppr (OverLit {ol_val :: forall p. HsOverLit p -> OverLitVal
ol_val=OverLitVal
val, ol_witness :: forall p. HsOverLit p -> HsExpr p
ol_witness=HsExpr p
witness})
= OverLitVal -> SDoc
forall a. Outputable a => a -> SDoc
ppr OverLitVal
val SDoc -> SDoc -> SDoc
<+> (SDoc -> SDoc
whenPprDebug (SDoc -> SDoc
parens (HsExpr (GhcPass pass) -> SDoc
forall (p :: Pass).
OutputableBndrId (GhcPass p) =>
HsExpr (GhcPass p) -> SDoc
pprExpr HsExpr p
HsExpr (GhcPass pass)
witness)))
ppr (XOverLit x :: XXOverLit p
x) = NoExt -> SDoc
forall a. Outputable a => a -> SDoc
ppr XXOverLit p
NoExt
x
instance Outputable OverLitVal where
ppr :: OverLitVal -> SDoc
ppr (HsIntegral i :: IntegralLit
i) = SourceText -> SDoc -> SDoc
pprWithSourceText (IntegralLit -> SourceText
il_text IntegralLit
i) (Integer -> SDoc
integer (IntegralLit -> Integer
il_value IntegralLit
i))
ppr (HsFractional f :: FractionalLit
f) = FractionalLit -> SDoc
forall a. Outputable a => a -> SDoc
ppr FractionalLit
f
ppr (HsIsString st :: SourceText
st s :: FastString
s) = SourceText -> SDoc -> SDoc
pprWithSourceText SourceText
st (FastString -> SDoc
pprHsString FastString
s)
pmPprHsLit :: HsLit (GhcPass x) -> SDoc
pmPprHsLit :: HsLit (GhcPass x) -> SDoc
pmPprHsLit (HsChar _ c :: Char
c) = Char -> SDoc
pprHsChar Char
c
pmPprHsLit (HsCharPrim _ c :: Char
c) = Char -> SDoc
pprHsChar Char
c
pmPprHsLit (HsString st :: XHsString (GhcPass x)
st s :: FastString
s) = SourceText -> SDoc -> SDoc
pprWithSourceText SourceText
XHsString (GhcPass x)
st (FastString -> SDoc
pprHsString FastString
s)
pmPprHsLit (HsStringPrim _ s :: ByteString
s) = ByteString -> SDoc
pprHsBytes ByteString
s
pmPprHsLit (HsInt _ i :: IntegralLit
i) = Integer -> SDoc
integer (IntegralLit -> Integer
il_value IntegralLit
i)
pmPprHsLit (HsIntPrim _ i :: Integer
i) = Integer -> SDoc
integer Integer
i
pmPprHsLit (HsWordPrim _ w :: Integer
w) = Integer -> SDoc
integer Integer
w
pmPprHsLit (HsInt64Prim _ i :: Integer
i) = Integer -> SDoc
integer Integer
i
pmPprHsLit (HsWord64Prim _ w :: Integer
w) = Integer -> SDoc
integer Integer
w
pmPprHsLit (HsInteger _ i :: Integer
i _) = Integer -> SDoc
integer Integer
i
pmPprHsLit (HsRat _ f :: FractionalLit
f _) = FractionalLit -> SDoc
forall a. Outputable a => a -> SDoc
ppr FractionalLit
f
pmPprHsLit (HsFloatPrim _ f :: FractionalLit
f) = FractionalLit -> SDoc
forall a. Outputable a => a -> SDoc
ppr FractionalLit
f
pmPprHsLit (HsDoublePrim _ d :: FractionalLit
d) = FractionalLit -> SDoc
forall a. Outputable a => a -> SDoc
ppr FractionalLit
d
pmPprHsLit (XLit x :: XXLit (GhcPass x)
x) = NoExt -> SDoc
forall a. Outputable a => a -> SDoc
ppr XXLit (GhcPass x)
NoExt
x
hsLitNeedsParens :: PprPrec -> HsLit x -> Bool
hsLitNeedsParens :: PprPrec -> HsLit x -> Bool
hsLitNeedsParens p :: PprPrec
p = HsLit x -> Bool
go
where
go :: HsLit x -> Bool
go (HsChar {}) = Bool
False
go (HsCharPrim {}) = Bool
False
go (HsString {}) = Bool
False
go (HsStringPrim {}) = Bool
False
go (HsInt _ x :: IntegralLit
x) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
> PprPrec
topPrec Bool -> Bool -> Bool
&& IntegralLit -> Bool
il_neg IntegralLit
x
go (HsIntPrim _ x :: Integer
x) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
> PprPrec
topPrec Bool -> Bool -> Bool
&& Integer
x Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
< 0
go (HsWordPrim {}) = Bool
False
go (HsInt64Prim _ x :: Integer
x) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
> PprPrec
topPrec Bool -> Bool -> Bool
&& Integer
x Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
< 0
go (HsWord64Prim {}) = Bool
False
go (HsInteger _ x :: Integer
x _) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
> PprPrec
topPrec Bool -> Bool -> Bool
&& Integer
x Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
< 0
go (HsRat _ x :: FractionalLit
x _) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
> PprPrec
topPrec Bool -> Bool -> Bool
&& FractionalLit -> Bool
fl_neg FractionalLit
x
go (HsFloatPrim _ x :: FractionalLit
x) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
> PprPrec
topPrec Bool -> Bool -> Bool
&& FractionalLit -> Bool
fl_neg FractionalLit
x
go (HsDoublePrim _ x :: FractionalLit
x) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
> PprPrec
topPrec Bool -> Bool -> Bool
&& FractionalLit -> Bool
fl_neg FractionalLit
x
go (XLit _) = Bool
False
hsOverLitNeedsParens :: PprPrec -> HsOverLit x -> Bool
hsOverLitNeedsParens :: PprPrec -> HsOverLit x -> Bool
hsOverLitNeedsParens p :: PprPrec
p (OverLit { ol_val :: forall p. HsOverLit p -> OverLitVal
ol_val = OverLitVal
olv }) = OverLitVal -> Bool
go OverLitVal
olv
where
go :: OverLitVal -> Bool
go :: OverLitVal -> Bool
go (HsIntegral x :: IntegralLit
x) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
> PprPrec
topPrec Bool -> Bool -> Bool
&& IntegralLit -> Bool
il_neg IntegralLit
x
go (HsFractional x :: FractionalLit
x) = PprPrec
p PprPrec -> PprPrec -> Bool
forall a. Ord a => a -> a -> Bool
> PprPrec
topPrec Bool -> Bool -> Bool
&& FractionalLit -> Bool
fl_neg FractionalLit
x
go (HsIsString {}) = Bool
False
hsOverLitNeedsParens _ (XOverLit { }) = Bool
False