module Ivory.Language.IString where

import qualified Ivory.Language.Syntax as AST
import           Ivory.Language.Type

import           Data.String           (IsString (..))


newtype IString = IString { getIString :: AST.Expr }

instance IvoryType IString where
  ivoryType _ = AST.TyConstRef AST.TyChar

instance IvoryVar IString where
  wrapVar    = wrapVarExpr
  unwrapExpr = getIString

instance IvoryExpr IString where
  wrapExpr = IString

instance IsString IString where
  fromString str = wrapExpr $ AST.ExpLit $ AST.LitString str