module Language.Fortran.AST.Literal.Boz where
import GHC.Generics
import Data.Data
import Control.DeepSeq ( NFData )
import Text.PrettyPrint.GenericPretty ( Out )
import qualified Data.List as List
import qualified Data.Char as Char
import qualified Numeric as Num
import Data.Bits
data Boz = Boz
{ Boz -> BozPrefix
bozPrefix :: BozPrefix
, Boz -> String
bozString :: String
, Boz -> Conforming
bozPrefixWasPostfix :: Conforming
} deriving stock (Int -> Boz -> ShowS
[Boz] -> ShowS
Boz -> String
(Int -> Boz -> ShowS)
-> (Boz -> String) -> ([Boz] -> ShowS) -> Show Boz
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Boz] -> ShowS
$cshowList :: [Boz] -> ShowS
show :: Boz -> String
$cshow :: Boz -> String
showsPrec :: Int -> Boz -> ShowS
$cshowsPrec :: Int -> Boz -> ShowS
Show, (forall x. Boz -> Rep Boz x)
-> (forall x. Rep Boz x -> Boz) -> Generic Boz
forall x. Rep Boz x -> Boz
forall x. Boz -> Rep Boz x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Boz x -> Boz
$cfrom :: forall x. Boz -> Rep Boz x
Generic, Typeable Boz
Typeable Boz
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Boz -> c Boz)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Boz)
-> (Boz -> Constr)
-> (Boz -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Boz))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Boz))
-> ((forall b. Data b => b -> b) -> Boz -> Boz)
-> (forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Boz -> r)
-> (forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Boz -> r)
-> (forall u. (forall d. Data d => d -> u) -> Boz -> [u])
-> (forall u. Int -> (forall d. Data d => d -> u) -> Boz -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Boz -> m Boz)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Boz -> m Boz)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Boz -> m Boz)
-> Data Boz
Boz -> DataType
Boz -> Constr
(forall b. Data b => b -> b) -> Boz -> Boz
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) -> Boz -> u
forall u. (forall d. Data d => d -> u) -> Boz -> [u]
forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Boz -> r
forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Boz -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Boz -> m Boz
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Boz -> m Boz
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Boz
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Boz -> c Boz
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Boz)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Boz)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Boz -> m Boz
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Boz -> m Boz
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Boz -> m Boz
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Boz -> m Boz
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Boz -> m Boz
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Boz -> m Boz
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Boz -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Boz -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Boz -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Boz -> [u]
gmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Boz -> r
$cgmapQr :: forall r r'.
(r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Boz -> r
gmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Boz -> r
$cgmapQl :: forall r r'.
(r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Boz -> r
gmapT :: (forall b. Data b => b -> b) -> Boz -> Boz
$cgmapT :: (forall b. Data b => b -> b) -> Boz -> Boz
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Boz)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Boz)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Boz)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Boz)
dataTypeOf :: Boz -> DataType
$cdataTypeOf :: Boz -> DataType
toConstr :: Boz -> Constr
$ctoConstr :: Boz -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Boz
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Boz
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Boz -> c Boz
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Boz -> c Boz
Data, Typeable, Eq Boz
Eq Boz
-> (Boz -> Boz -> Ordering)
-> (Boz -> Boz -> Bool)
-> (Boz -> Boz -> Bool)
-> (Boz -> Boz -> Bool)
-> (Boz -> Boz -> Bool)
-> (Boz -> Boz -> Boz)
-> (Boz -> Boz -> Boz)
-> Ord Boz
Boz -> Boz -> Bool
Boz -> Boz -> Ordering
Boz -> Boz -> Boz
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
min :: Boz -> Boz -> Boz
$cmin :: Boz -> Boz -> Boz
max :: Boz -> Boz -> Boz
$cmax :: Boz -> Boz -> Boz
>= :: Boz -> Boz -> Bool
$c>= :: Boz -> Boz -> Bool
> :: Boz -> Boz -> Bool
$c> :: Boz -> Boz -> Bool
<= :: Boz -> Boz -> Bool
$c<= :: Boz -> Boz -> Bool
< :: Boz -> Boz -> Bool
$c< :: Boz -> Boz -> Bool
compare :: Boz -> Boz -> Ordering
$ccompare :: Boz -> Boz -> Ordering
Ord)
deriving anyclass (Boz -> ()
(Boz -> ()) -> NFData Boz
forall a. (a -> ()) -> NFData a
rnf :: Boz -> ()
$crnf :: Boz -> ()
NFData, Int -> Boz -> Doc
[Boz] -> Doc
Boz -> Doc
(Int -> Boz -> Doc) -> (Boz -> Doc) -> ([Boz] -> Doc) -> Out Boz
forall a. (Int -> a -> Doc) -> (a -> Doc) -> ([a] -> Doc) -> Out a
docList :: [Boz] -> Doc
$cdocList :: [Boz] -> Doc
doc :: Boz -> Doc
$cdoc :: Boz -> Doc
docPrec :: Int -> Boz -> Doc
$cdocPrec :: Int -> Boz -> Doc
Out)
instance Eq Boz where
Boz
b1 == :: Boz -> Boz -> Bool
== Boz
b2 = Boz -> BozPrefix
bozPrefix Boz
b1 BozPrefix -> BozPrefix -> Bool
forall a. Eq a => a -> a -> Bool
== Boz -> BozPrefix
bozPrefix Boz
b2
Bool -> Bool -> Bool
&& Boz -> String
bozString Boz
b1 String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== Boz -> String
bozString Boz
b2
data BozPrefix
= BozPrefixB
| BozPrefixO
| BozPrefixZ Conforming
deriving stock (Int -> BozPrefix -> ShowS
[BozPrefix] -> ShowS
BozPrefix -> String
(Int -> BozPrefix -> ShowS)
-> (BozPrefix -> String)
-> ([BozPrefix] -> ShowS)
-> Show BozPrefix
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BozPrefix] -> ShowS
$cshowList :: [BozPrefix] -> ShowS
show :: BozPrefix -> String
$cshow :: BozPrefix -> String
showsPrec :: Int -> BozPrefix -> ShowS
$cshowsPrec :: Int -> BozPrefix -> ShowS
Show, (forall x. BozPrefix -> Rep BozPrefix x)
-> (forall x. Rep BozPrefix x -> BozPrefix) -> Generic BozPrefix
forall x. Rep BozPrefix x -> BozPrefix
forall x. BozPrefix -> Rep BozPrefix x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep BozPrefix x -> BozPrefix
$cfrom :: forall x. BozPrefix -> Rep BozPrefix x
Generic, Typeable BozPrefix
Typeable BozPrefix
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> BozPrefix -> c BozPrefix)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c BozPrefix)
-> (BozPrefix -> Constr)
-> (BozPrefix -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c BozPrefix))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c BozPrefix))
-> ((forall b. Data b => b -> b) -> BozPrefix -> BozPrefix)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> BozPrefix -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> BozPrefix -> r)
-> (forall u. (forall d. Data d => d -> u) -> BozPrefix -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> BozPrefix -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> BozPrefix -> m BozPrefix)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BozPrefix -> m BozPrefix)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BozPrefix -> m BozPrefix)
-> Data BozPrefix
BozPrefix -> DataType
BozPrefix -> Constr
(forall b. Data b => b -> b) -> BozPrefix -> BozPrefix
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) -> BozPrefix -> u
forall u. (forall d. Data d => d -> u) -> BozPrefix -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> BozPrefix -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> BozPrefix -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> BozPrefix -> m BozPrefix
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BozPrefix -> m BozPrefix
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c BozPrefix
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> BozPrefix -> c BozPrefix
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c BozPrefix)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c BozPrefix)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BozPrefix -> m BozPrefix
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BozPrefix -> m BozPrefix
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BozPrefix -> m BozPrefix
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> BozPrefix -> m BozPrefix
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> BozPrefix -> m BozPrefix
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> BozPrefix -> m BozPrefix
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> BozPrefix -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> BozPrefix -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> BozPrefix -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> BozPrefix -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> BozPrefix -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> BozPrefix -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> BozPrefix -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> BozPrefix -> r
gmapT :: (forall b. Data b => b -> b) -> BozPrefix -> BozPrefix
$cgmapT :: (forall b. Data b => b -> b) -> BozPrefix -> BozPrefix
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c BozPrefix)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c BozPrefix)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c BozPrefix)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c BozPrefix)
dataTypeOf :: BozPrefix -> DataType
$cdataTypeOf :: BozPrefix -> DataType
toConstr :: BozPrefix -> Constr
$ctoConstr :: BozPrefix -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c BozPrefix
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c BozPrefix
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> BozPrefix -> c BozPrefix
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> BozPrefix -> c BozPrefix
Data, Typeable, Eq BozPrefix
Eq BozPrefix
-> (BozPrefix -> BozPrefix -> Ordering)
-> (BozPrefix -> BozPrefix -> Bool)
-> (BozPrefix -> BozPrefix -> Bool)
-> (BozPrefix -> BozPrefix -> Bool)
-> (BozPrefix -> BozPrefix -> Bool)
-> (BozPrefix -> BozPrefix -> BozPrefix)
-> (BozPrefix -> BozPrefix -> BozPrefix)
-> Ord BozPrefix
BozPrefix -> BozPrefix -> Bool
BozPrefix -> BozPrefix -> Ordering
BozPrefix -> BozPrefix -> BozPrefix
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
min :: BozPrefix -> BozPrefix -> BozPrefix
$cmin :: BozPrefix -> BozPrefix -> BozPrefix
max :: BozPrefix -> BozPrefix -> BozPrefix
$cmax :: BozPrefix -> BozPrefix -> BozPrefix
>= :: BozPrefix -> BozPrefix -> Bool
$c>= :: BozPrefix -> BozPrefix -> Bool
> :: BozPrefix -> BozPrefix -> Bool
$c> :: BozPrefix -> BozPrefix -> Bool
<= :: BozPrefix -> BozPrefix -> Bool
$c<= :: BozPrefix -> BozPrefix -> Bool
< :: BozPrefix -> BozPrefix -> Bool
$c< :: BozPrefix -> BozPrefix -> Bool
compare :: BozPrefix -> BozPrefix -> Ordering
$ccompare :: BozPrefix -> BozPrefix -> Ordering
Ord)
deriving anyclass (BozPrefix -> ()
(BozPrefix -> ()) -> NFData BozPrefix
forall a. (a -> ()) -> NFData a
rnf :: BozPrefix -> ()
$crnf :: BozPrefix -> ()
NFData, Int -> BozPrefix -> Doc
[BozPrefix] -> Doc
BozPrefix -> Doc
(Int -> BozPrefix -> Doc)
-> (BozPrefix -> Doc) -> ([BozPrefix] -> Doc) -> Out BozPrefix
forall a. (Int -> a -> Doc) -> (a -> Doc) -> ([a] -> Doc) -> Out a
docList :: [BozPrefix] -> Doc
$cdocList :: [BozPrefix] -> Doc
doc :: BozPrefix -> Doc
$cdoc :: BozPrefix -> Doc
docPrec :: Int -> BozPrefix -> Doc
$cdocPrec :: Int -> BozPrefix -> Doc
Out)
instance Eq BozPrefix where
BozPrefix
p1 == :: BozPrefix -> BozPrefix -> Bool
== BozPrefix
p2 = case (BozPrefix
p1, BozPrefix
p2) of (BozPrefix
BozPrefixB, BozPrefix
BozPrefixB) -> Bool
True
(BozPrefix
BozPrefixO, BozPrefix
BozPrefixO) -> Bool
True
(BozPrefixZ{}, BozPrefixZ{}) -> Bool
True
(BozPrefix, BozPrefix)
_ -> Bool
False
data Conforming = Conforming | Nonconforming
deriving stock (Conforming -> Conforming -> Bool
(Conforming -> Conforming -> Bool)
-> (Conforming -> Conforming -> Bool) -> Eq Conforming
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Conforming -> Conforming -> Bool
$c/= :: Conforming -> Conforming -> Bool
== :: Conforming -> Conforming -> Bool
$c== :: Conforming -> Conforming -> Bool
Eq, Int -> Conforming -> ShowS
[Conforming] -> ShowS
Conforming -> String
(Int -> Conforming -> ShowS)
-> (Conforming -> String)
-> ([Conforming] -> ShowS)
-> Show Conforming
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Conforming] -> ShowS
$cshowList :: [Conforming] -> ShowS
show :: Conforming -> String
$cshow :: Conforming -> String
showsPrec :: Int -> Conforming -> ShowS
$cshowsPrec :: Int -> Conforming -> ShowS
Show, (forall x. Conforming -> Rep Conforming x)
-> (forall x. Rep Conforming x -> Conforming) -> Generic Conforming
forall x. Rep Conforming x -> Conforming
forall x. Conforming -> Rep Conforming x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Conforming x -> Conforming
$cfrom :: forall x. Conforming -> Rep Conforming x
Generic, Typeable Conforming
Typeable Conforming
-> (forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Conforming -> c Conforming)
-> (forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Conforming)
-> (Conforming -> Constr)
-> (Conforming -> DataType)
-> (forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Conforming))
-> (forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e))
-> Maybe (c Conforming))
-> ((forall b. Data b => b -> b) -> Conforming -> Conforming)
-> (forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Conforming -> r)
-> (forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Conforming -> r)
-> (forall u. (forall d. Data d => d -> u) -> Conforming -> [u])
-> (forall u.
Int -> (forall d. Data d => d -> u) -> Conforming -> u)
-> (forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Conforming -> m Conforming)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Conforming -> m Conforming)
-> (forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Conforming -> m Conforming)
-> Data Conforming
Conforming -> DataType
Conforming -> Constr
(forall b. Data b => b -> b) -> Conforming -> Conforming
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) -> Conforming -> u
forall u. (forall d. Data d => d -> u) -> Conforming -> [u]
forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Conforming -> r
forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Conforming -> r
forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Conforming -> m Conforming
forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Conforming -> m Conforming
forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Conforming
forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Conforming -> c Conforming
forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Conforming)
forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Conforming)
gmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Conforming -> m Conforming
$cgmapMo :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Conforming -> m Conforming
gmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Conforming -> m Conforming
$cgmapMp :: forall (m :: * -> *).
MonadPlus m =>
(forall d. Data d => d -> m d) -> Conforming -> m Conforming
gmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Conforming -> m Conforming
$cgmapM :: forall (m :: * -> *).
Monad m =>
(forall d. Data d => d -> m d) -> Conforming -> m Conforming
gmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Conforming -> u
$cgmapQi :: forall u. Int -> (forall d. Data d => d -> u) -> Conforming -> u
gmapQ :: forall u. (forall d. Data d => d -> u) -> Conforming -> [u]
$cgmapQ :: forall u. (forall d. Data d => d -> u) -> Conforming -> [u]
gmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Conforming -> r
$cgmapQr :: forall r r'.
(r' -> r -> r)
-> r -> (forall d. Data d => d -> r') -> Conforming -> r
gmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Conforming -> r
$cgmapQl :: forall r r'.
(r -> r' -> r)
-> r -> (forall d. Data d => d -> r') -> Conforming -> r
gmapT :: (forall b. Data b => b -> b) -> Conforming -> Conforming
$cgmapT :: (forall b. Data b => b -> b) -> Conforming -> Conforming
dataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Conforming)
$cdataCast2 :: forall (t :: * -> * -> *) (c :: * -> *).
Typeable t =>
(forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Conforming)
dataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Conforming)
$cdataCast1 :: forall (t :: * -> *) (c :: * -> *).
Typeable t =>
(forall d. Data d => c (t d)) -> Maybe (c Conforming)
dataTypeOf :: Conforming -> DataType
$cdataTypeOf :: Conforming -> DataType
toConstr :: Conforming -> Constr
$ctoConstr :: Conforming -> Constr
gunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Conforming
$cgunfold :: forall (c :: * -> *).
(forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c Conforming
gfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Conforming -> c Conforming
$cgfoldl :: forall (c :: * -> *).
(forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Conforming -> c Conforming
Data, Typeable, Eq Conforming
Eq Conforming
-> (Conforming -> Conforming -> Ordering)
-> (Conforming -> Conforming -> Bool)
-> (Conforming -> Conforming -> Bool)
-> (Conforming -> Conforming -> Bool)
-> (Conforming -> Conforming -> Bool)
-> (Conforming -> Conforming -> Conforming)
-> (Conforming -> Conforming -> Conforming)
-> Ord Conforming
Conforming -> Conforming -> Bool
Conforming -> Conforming -> Ordering
Conforming -> Conforming -> Conforming
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
min :: Conforming -> Conforming -> Conforming
$cmin :: Conforming -> Conforming -> Conforming
max :: Conforming -> Conforming -> Conforming
$cmax :: Conforming -> Conforming -> Conforming
>= :: Conforming -> Conforming -> Bool
$c>= :: Conforming -> Conforming -> Bool
> :: Conforming -> Conforming -> Bool
$c> :: Conforming -> Conforming -> Bool
<= :: Conforming -> Conforming -> Bool
$c<= :: Conforming -> Conforming -> Bool
< :: Conforming -> Conforming -> Bool
$c< :: Conforming -> Conforming -> Bool
compare :: Conforming -> Conforming -> Ordering
$ccompare :: Conforming -> Conforming -> Ordering
Ord)
deriving anyclass (Conforming -> ()
(Conforming -> ()) -> NFData Conforming
forall a. (a -> ()) -> NFData a
rnf :: Conforming -> ()
$crnf :: Conforming -> ()
NFData, Int -> Conforming -> Doc
[Conforming] -> Doc
Conforming -> Doc
(Int -> Conforming -> Doc)
-> (Conforming -> Doc) -> ([Conforming] -> Doc) -> Out Conforming
forall a. (Int -> a -> Doc) -> (a -> Doc) -> ([a] -> Doc) -> Out a
docList :: [Conforming] -> Doc
$cdocList :: [Conforming] -> Doc
doc :: Conforming -> Doc
$cdoc :: Conforming -> Doc
docPrec :: Int -> Conforming -> Doc
$cdocPrec :: Int -> Conforming -> Doc
Out)
parseBoz :: String -> Boz
parseBoz :: String -> Boz
parseBoz String
s =
case String -> Maybe (Char, String)
forall a. [a] -> Maybe (a, [a])
List.uncons String
s of
Maybe (Char, String)
Nothing -> Boz
forall {a}. a
errInvalid
Just (Char
pc, String
ps) -> case Char -> Maybe BozPrefix
parsePrefix Char
pc of
Just BozPrefix
p -> BozPrefix -> String -> Conforming -> Boz
Boz BozPrefix
p (ShowS
forall {a}. [a] -> [a]
shave String
ps) Conforming
Conforming
Maybe BozPrefix
Nothing -> case Char -> Maybe BozPrefix
parsePrefix (String -> Char
forall a. [a] -> a
List.last String
s) of
Just BozPrefix
p -> BozPrefix -> String -> Conforming -> Boz
Boz BozPrefix
p (ShowS
forall {a}. [a] -> [a]
shave (ShowS
forall {a}. [a] -> [a]
init String
s)) Conforming
Nonconforming
Maybe BozPrefix
Nothing -> Boz
forall {a}. a
errInvalid
where
parsePrefix :: Char -> Maybe BozPrefix
parsePrefix Char
p
| Char
p' Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'b' = BozPrefix -> Maybe BozPrefix
forall a. a -> Maybe a
Just (BozPrefix -> Maybe BozPrefix) -> BozPrefix -> Maybe BozPrefix
forall a b. (a -> b) -> a -> b
$ BozPrefix
BozPrefixB
| Char
p' Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'o' = BozPrefix -> Maybe BozPrefix
forall a. a -> Maybe a
Just (BozPrefix -> Maybe BozPrefix) -> BozPrefix -> Maybe BozPrefix
forall a b. (a -> b) -> a -> b
$ BozPrefix
BozPrefixO
| Char
p' Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'z' = BozPrefix -> Maybe BozPrefix
forall a. a -> Maybe a
Just (BozPrefix -> Maybe BozPrefix) -> BozPrefix -> Maybe BozPrefix
forall a b. (a -> b) -> a -> b
$ Conforming -> BozPrefix
BozPrefixZ Conforming
Conforming
| Char
p' Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'x' = BozPrefix -> Maybe BozPrefix
forall a. a -> Maybe a
Just (BozPrefix -> Maybe BozPrefix) -> BozPrefix -> Maybe BozPrefix
forall a b. (a -> b) -> a -> b
$ Conforming -> BozPrefix
BozPrefixZ Conforming
Nonconforming
| Bool
otherwise = Maybe BozPrefix
forall a. Maybe a
Nothing
where p' :: Char
p' = Char -> Char
Char.toLower Char
p
errInvalid :: a
errInvalid = String -> a
forall a. HasCallStack => String -> a
error String
"Language.Fortran.AST.BOZ.parseBoz: invalid BOZ string"
shave :: [a] -> [a]
shave = [a] -> [a]
forall {a}. [a] -> [a]
tail ([a] -> [a]) -> ([a] -> [a]) -> [a] -> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [a] -> [a]
forall {a}. [a] -> [a]
init
prettyBoz :: Boz -> String
prettyBoz :: Boz -> String
prettyBoz Boz
b = BozPrefix -> Char
prettyBozPrefix (Boz -> BozPrefix
bozPrefix Boz
b) Char -> ShowS
forall a. a -> [a] -> [a]
: Char
'\'' Char -> ShowS
forall a. a -> [a] -> [a]
: Boz -> String
bozString Boz
b String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
"'"
where prettyBozPrefix :: BozPrefix -> Char
prettyBozPrefix = \case BozPrefix
BozPrefixB -> Char
'b'
BozPrefix
BozPrefixO -> Char
'o'
BozPrefixZ{} -> Char
'z'
bozAsNatural :: (Num a, Eq a) => Boz -> a
bozAsNatural :: forall a. (Num a, Eq a) => Boz -> a
bozAsNatural (Boz BozPrefix
pfx String
str Conforming
_) = [(a, String)] -> a
forall {c} {b}. [(c, b)] -> c
runReadS ([(a, String)] -> a) -> [(a, String)] -> a
forall a b. (a -> b) -> a -> b
$ ReadS a
parser String
str
where
runReadS :: [(c, b)] -> c
runReadS = (c, b) -> c
forall a b. (a, b) -> a
fst ((c, b) -> c) -> ([(c, b)] -> (c, b)) -> [(c, b)] -> c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(c, b)] -> (c, b)
forall a. [a] -> a
head
parser :: ReadS a
parser = case BozPrefix
pfx of BozPrefix
BozPrefixB -> a -> (Char -> Bool) -> (Char -> Int) -> ReadS a
forall a. Num a => a -> (Char -> Bool) -> (Char -> Int) -> ReadS a
Num.readInt a
2 (Bool -> Char -> Bool
forall a b. a -> b -> a
const Bool
True) Char -> Int
binDigitVal
BozPrefix
BozPrefixO -> ReadS a
forall a. (Eq a, Num a) => ReadS a
Num.readOct
BozPrefixZ{} -> ReadS a
forall a. (Eq a, Num a) => ReadS a
Num.readHex
binDigitVal :: Char -> Int
binDigitVal = \case Char
'0' -> Int
0
Char
'1' -> Int
1
Char
_ -> String -> Int
forall a. HasCallStack => String -> a
error String
"Language.Fortran.AST.BOZ.bozAsNatural: invalid BOZ string"
bozAsTwosComp :: (Num a, Eq a, FiniteBits a) => Boz -> a
bozAsTwosComp :: forall a. (Num a, Eq a, FiniteBits a) => Boz -> a
bozAsTwosComp Boz
boz =
if Bool
msbIsSet
then a
asNat a -> a -> a
forall a. Num a => a -> a -> a
- (a
2 a -> Int -> a
forall a b. (Num a, Integral b) => a -> b -> a
^ Int
bitCount)
else a
asNat
where
msbIsSet :: Bool
msbIsSet = a -> Int -> Bool
forall a. Bits a => a -> Int -> Bool
testBit a
asNat (Int
bitCount Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
asNat :: a
asNat = Boz -> a
forall a. (Num a, Eq a) => Boz -> a
bozAsNatural Boz
boz
bitCount :: Int
bitCount = a -> Int
forall b. FiniteBits b => b -> Int
finiteBitSize a
asNat