-- This corresponds to src/comp/FStringCompat.hs in bsc.
module Language.Bluespec.Classic.AST.FString
  ( FString
  , getFString
  , mkFString
  , tmpFString
  ) where

import Data.String (IsString(..))
import qualified Data.Text as T
import Text.PrettyPrint.HughesPJClass

import Language.Bluespec.Classic.AST.SString
import Language.Bluespec.Prelude

-- wrapper to make SStrings look like FStrings

newtype FString = FString SString
  deriving (FString -> FString -> Bool
(FString -> FString -> Bool)
-> (FString -> FString -> Bool) -> Eq FString
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FString -> FString -> Bool
== :: FString -> FString -> Bool
$c/= :: FString -> FString -> Bool
/= :: FString -> FString -> Bool
Eq, Eq FString
Eq FString =>
(FString -> FString -> Ordering)
-> (FString -> FString -> Bool)
-> (FString -> FString -> Bool)
-> (FString -> FString -> Bool)
-> (FString -> FString -> Bool)
-> (FString -> FString -> FString)
-> (FString -> FString -> FString)
-> Ord FString
FString -> FString -> Bool
FString -> FString -> Ordering
FString -> FString -> FString
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
$ccompare :: FString -> FString -> Ordering
compare :: FString -> FString -> Ordering
$c< :: FString -> FString -> Bool
< :: FString -> FString -> Bool
$c<= :: FString -> FString -> Bool
<= :: FString -> FString -> Bool
$c> :: FString -> FString -> Bool
> :: FString -> FString -> Bool
$c>= :: FString -> FString -> Bool
>= :: FString -> FString -> Bool
$cmax :: FString -> FString -> FString
max :: FString -> FString -> FString
$cmin :: FString -> FString -> FString
min :: FString -> FString -> FString
Ord)

instance IsString FString where
  fromString :: String -> FString
fromString = SString -> FString
FString (SString -> FString) -> (String -> SString) -> String -> FString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> SString
T.pack

instance Show FString where
    show :: FString -> String
show (FString SString
s) = SString -> String
forall a. Show a => a -> String
show SString
s

instance Pretty FString where
    pPrintPrec :: PrettyLevel -> Rational -> FString -> Doc
pPrintPrec PrettyLevel
_ Rational
_ FString
x = String -> Doc
text (FString -> String
forall a. Show a => a -> String
show FString
x)

getFString :: FString -> String
getFString :: FString -> String
getFString = FString -> String
toString

mkFString :: String -> FString
mkFString :: String -> FString
mkFString String
s = String -> FString
forall a. IsString a => String -> a
fromString String
s

tmpFString :: Int -> String -> FString
tmpFString :: Int -> String -> FString
tmpFString Int
_ = String -> FString
forall a. IsString a => String -> a
fromString

toString :: FString -> String
toString :: FString -> String
toString (FString SString
s) = SString -> String
T.unpack SString
s