{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}

module Events.State.Types where

import ClassyPrelude

import Control.Lens (makeLenses)

import Data.Taskell.Lists (Lists)

import qualified Events.State.Types.Mode as M (Mode)

type Pointer = (Int, Int)

data State = State
    { _mode    :: M.Mode
    , _lists   :: Lists
    , _history :: [(Pointer, Lists)]
    , _current :: Pointer
    , _path    :: FilePath
    , _io      :: Maybe Lists
    } deriving (Eq, Show)

-- create lenses
$(makeLenses ''State)

type Stateful = State -> Maybe State