{-# LANGUAGE OverloadedStrings #-}
module Language.Haskell.Liquid.String where
import qualified Data.ByteString as BS
import qualified Data.String as ST
data SMTString = S BS.ByteString
deriving (SMTString -> SMTString -> Bool
(SMTString -> SMTString -> Bool)
-> (SMTString -> SMTString -> Bool) -> Eq SMTString
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SMTString -> SMTString -> Bool
$c/= :: SMTString -> SMTString -> Bool
== :: SMTString -> SMTString -> Bool
$c== :: SMTString -> SMTString -> Bool
Eq, Int -> SMTString -> ShowS
[SMTString] -> ShowS
SMTString -> String
(Int -> SMTString -> ShowS)
-> (SMTString -> String)
-> ([SMTString] -> ShowS)
-> Show SMTString
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SMTString] -> ShowS
$cshowList :: [SMTString] -> ShowS
show :: SMTString -> String
$cshow :: SMTString -> String
showsPrec :: Int -> SMTString -> ShowS
$cshowsPrec :: Int -> SMTString -> ShowS
Show)
concatString :: SMTString -> SMTString -> SMTString
concatString :: SMTString -> SMTString -> SMTString
concatString (S ByteString
s1) (S ByteString
s2) = ByteString -> SMTString
S (ByteString
s1 ByteString -> ByteString -> ByteString
`BS.append` ByteString
s2)
stringEmp :: SMTString
stringEmp :: SMTString
stringEmp = ByteString -> SMTString
S (ByteString
BS.empty)
stringLen :: SMTString -> Int
stringLen :: SMTString -> Int
stringLen (S ByteString
s) = ByteString -> Int
BS.length ByteString
s
subString :: SMTString -> Int -> Int -> SMTString
subString :: SMTString -> Int -> Int -> SMTString
subString (S ByteString
s) Int
o Int
l = ByteString -> SMTString
S (Int -> ByteString -> ByteString
BS.take Int
l (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$ Int -> ByteString -> ByteString
BS.drop Int
o ByteString
s)
takeString :: Int -> SMTString -> SMTString
takeString :: Int -> SMTString -> SMTString
takeString Int
i (S ByteString
s) = ByteString -> SMTString
S (Int -> ByteString -> ByteString
BS.take Int
i ByteString
s)
dropString :: Int -> SMTString -> SMTString
dropString :: Int -> SMTString -> SMTString
dropString Int
i (S ByteString
s) = ByteString -> SMTString
S (Int -> ByteString -> ByteString
BS.drop Int
i ByteString
s)
fromString :: String -> SMTString
fromString :: String -> SMTString
fromString = ByteString -> SMTString
S (ByteString -> SMTString)
-> (String -> ByteString) -> String -> SMTString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ByteString
forall a. IsString a => String -> a
ST.fromString
isNullString :: SMTString -> Bool
isNullString :: SMTString -> Bool
isNullString (S ByteString
s) = ByteString -> Int
BS.length ByteString
s Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0