-- | Representation of Haskell literals

module Language.Haskell.Tools.AST.Representation.Literals where

-- | Haskell literals

data ULiteral dom stage
  = UCharLit { _charLitValue :: Char
             } -- ^ Character literal: @'c'@

  | UStringLit { _stringLitValue :: String
               } -- ^ String literal: @"abc"@

  | UIntLit { _intLitValue :: Integer
            } -- ^ Integer literal: @12@

  | UFracLit { _fracLitValue :: Rational
             } -- ^ Fractional literal: @3.14@

  | UPrimIntLit { _intLitValue :: Integer
                } -- ^ Primitive integer literal (of type @Int#@): @32#@

  | UPrimWordLit { _intLitValue :: Integer
                 } -- ^ Primitive word literal (of type @Word#@): @32##@

  | UPrimFloatLit { _floatLitValue :: Rational
                  } -- ^ Primitive float literal (of type @Float#@): @3.14#@

  | UPrimDoubleLit { _floatLitValue :: Rational
                   } -- ^ Primitive double literal (of type @Double#@): @3.14##@

  | UPrimCharLit { _charLitValue :: Char
                 } -- ^ Primitive character literal (of type @Char#@): @'c'#@

  | UPrimStringLit { _stringLitValue :: String
                   } -- ^ Primitive string literal (of type @Addr#@): @"xxx"#@