{-# LANGUAGE TemplateHaskell #-}
--------------------------------------------------------------------
-- |
-- Copyright :  (c) Edward Kmett and Dan Doel 2012-2013
-- License   :  BSD3
-- Maintainer:  Edward Kmett <ekmett@gmail.com>
-- Stability :  experimental
-- Portability: non-portable
--
--------------------------------------------------------------------
module Ermine.Console.State
  ( Console
  , ConsoleState(..)
  , HasConsoleState(..)
  ) where

import Control.Lens
import Control.Monad.State.Strict
import Data.Default
import Data.Set as Set
import Data.Monoid

-- | The monad in which we perform our console interactions
type Console = StateT ConsoleState IO

-- | The extra state we need in order to perform auto-completion in the console
newtype ConsoleState = ConsoleState
  { _consoleIds :: Set String -- ^ The set of extra names that are in scope for auto-completion.
  }

instance Default ConsoleState where
  def = ConsoleState mempty

makeClassy ''ConsoleState