{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module What4.FunctionName
(
FunctionName
, functionName
, functionNameFromText
, startFunctionName
) where
import Data.Hashable
import Data.String
import qualified Data.Text as Text
import qualified Prettyprinter as PP
newtype FunctionName = FunctionName { FunctionName -> Text
functionName :: Text.Text }
deriving (FunctionName -> FunctionName -> Bool
(FunctionName -> FunctionName -> Bool)
-> (FunctionName -> FunctionName -> Bool) -> Eq FunctionName
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: FunctionName -> FunctionName -> Bool
$c/= :: FunctionName -> FunctionName -> Bool
== :: FunctionName -> FunctionName -> Bool
$c== :: FunctionName -> FunctionName -> Bool
Eq, Eq FunctionName
Eq FunctionName
-> (FunctionName -> FunctionName -> Ordering)
-> (FunctionName -> FunctionName -> Bool)
-> (FunctionName -> FunctionName -> Bool)
-> (FunctionName -> FunctionName -> Bool)
-> (FunctionName -> FunctionName -> Bool)
-> (FunctionName -> FunctionName -> FunctionName)
-> (FunctionName -> FunctionName -> FunctionName)
-> Ord FunctionName
FunctionName -> FunctionName -> Bool
FunctionName -> FunctionName -> Ordering
FunctionName -> FunctionName -> FunctionName
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 :: FunctionName -> FunctionName -> FunctionName
$cmin :: FunctionName -> FunctionName -> FunctionName
max :: FunctionName -> FunctionName -> FunctionName
$cmax :: FunctionName -> FunctionName -> FunctionName
>= :: FunctionName -> FunctionName -> Bool
$c>= :: FunctionName -> FunctionName -> Bool
> :: FunctionName -> FunctionName -> Bool
$c> :: FunctionName -> FunctionName -> Bool
<= :: FunctionName -> FunctionName -> Bool
$c<= :: FunctionName -> FunctionName -> Bool
< :: FunctionName -> FunctionName -> Bool
$c< :: FunctionName -> FunctionName -> Bool
compare :: FunctionName -> FunctionName -> Ordering
$ccompare :: FunctionName -> FunctionName -> Ordering
$cp1Ord :: Eq FunctionName
Ord, Int -> FunctionName -> Int
FunctionName -> Int
(Int -> FunctionName -> Int)
-> (FunctionName -> Int) -> Hashable FunctionName
forall a. (Int -> a -> Int) -> (a -> Int) -> Hashable a
hash :: FunctionName -> Int
$chash :: FunctionName -> Int
hashWithSalt :: Int -> FunctionName -> Int
$chashWithSalt :: Int -> FunctionName -> Int
Hashable)
instance IsString FunctionName where
fromString :: String -> FunctionName
fromString String
s = Text -> FunctionName
FunctionName (String -> Text
forall a. IsString a => String -> a
fromString String
s)
instance Show FunctionName where
show :: FunctionName -> String
show (FunctionName Text
nm) = Text -> String
Text.unpack Text
nm
instance PP.Pretty FunctionName where
pretty :: FunctionName -> Doc ann
pretty (FunctionName Text
nm) = Text -> Doc ann
forall a ann. Pretty a => a -> Doc ann
PP.pretty Text
nm
startFunctionName :: FunctionName
startFunctionName :: FunctionName
startFunctionName = String -> FunctionName
forall a. IsString a => String -> a
fromString String
"_start"
functionNameFromText :: Text.Text -> FunctionName
functionNameFromText :: Text -> FunctionName
functionNameFromText = Text -> FunctionName
FunctionName