packages feed

ansiform-0.7.8.5: src/Ansiform/Internal/State.hs

module Ansiform.Internal.State where

--------------------------------------------------------------------------------
import           System.IO (Handle)
import           Ansiform.Internal.Number
import           Ansiform.Internal.Page
import           Ansiform.Internal.Settings


-- State Type
--------------------------------------------------------------------------------

-- State carries the data needed to print each page correctly.
-- | Drawing state: the settings, the page on screen and the line counts from the last draw.
newtype State = State (Settings,Page,[Number])


formState :: Settings -> Page -> [Number] -> State
formState s p ns = State (s,p,ns)

unStateSettings :: State -> IO Config
unStateSettings (State (s,_,_)) = runSettings s

-- Resolves the state settings for a given output handle.
unStateSettingsOn :: Handle -> State -> IO Config
unStateSettingsOn h (State (s,_,_)) = runSettingsOn h s

unStatePage :: State -> Page
unStatePage (State (_,p,_)) = p

unStateResults :: State -> [Number]
unStateResults (State (_,_,ns)) = ns

updateState :: State -> Page -> [Number] -> State
updateState (State (s,_,_)) p ns = formState s p ns