rest-rewrite-0.2.0: src/Language/REST/Op.hs
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
module Language.REST.Op where
import Data.Text as T
import Data.Hashable
import Data.String
import GHC.Generics (Generic)
import Language.REST.SMT
newtype Op = Op Text deriving (Eq, Ord, Hashable, Generic)
instance Show Op where
show (Op o) = unpack o
instance IsString Op where
fromString = Op . pack
instance ToSMTVar Op Int where
toSMTVar (Op "ite") = SMTVar "_ite_"
toSMTVar (Op op) = SMTVar $ T.append "op_" $ T.concatMap go op
where
go '∅' = "_empty_"
go '₀' = "0"
go '₁' = "1"
go '$' = "_dollar_"
go '[' = "_lb_"
go ']' = "_rb_"
go ':' = "_colon_"
go '.' = "_dot_"
go '#' = "_pound_"
go '\'' = "_comma_"
go '/' = "_slash_"
go ' ' = "_space_"
go '∪' = "_cup_"
go '\\' = "_bslash_"
go c = singleton c