--------------------------------------------------------------------
-- |
-- Copyright :  (c) Edward Kmett and Dan Doel 2013-2014
-- License   :  BSD3
-- Maintainer:  Edward Kmett <ekmett@gmail.com>
-- Stability :  experimental
-- Portability: non-portable
--
-- This module provides the parser for 'literal' terms or patterns
--------------------------------------------------------------------
module Ermine.Parser.Literal
  ( literal
  ) where

import Control.Applicative
import Ermine.Syntax.Literal
import Text.Parser.Token

-- | Parse a 'literal' number, string or character.
literal :: (Monad m, TokenParsing m) => m Literal
literal = either Integer Double <$> naturalOrDouble
      <|> String <$> stringLiteral
      <|> Char <$> charLiteral