{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}

module Bricks.Keyword
  (
  -- * Type
    Keyword

  -- * List of keywords
  , keywords

  -- * The keywords
  , keyword'rec
  , keyword'let
  , keyword'in
  , keyword'inherit
  , keyword'inlineComment

  -- * Type conversion
  , keywordString
  , keywordText

  ) where

-- Bricks internal
import           Bricks.Internal.Prelude
import           Bricks.Internal.Text    (Text)
import qualified Bricks.Internal.Text    as Text

newtype Keyword =
  Keyword
    { keywordText :: Text
    }

{- | All of the keywords. This list is used when parsing and rendering because
an unquoted string cannot have a name that is exactly the same as a keyword. -}

keywords :: [Keyword]
keywords =
  [ keyword'rec
  , keyword'let
  , keyword'in
  , keyword'inherit
  , keyword'inlineComment
  ]

keywordString :: Keyword -> String
keywordString = Text.unpack . keywordText

keyword'rec :: Keyword
keyword'rec = Keyword "rec"

keyword'let :: Keyword
keyword'let = Keyword "let"

keyword'in :: Keyword
keyword'in = Keyword "in"

keyword'inherit :: Keyword
keyword'inherit = Keyword "inherit"

keyword'inlineComment :: Keyword
keyword'inlineComment = Keyword "--"