ansiform-1.1.0.0: src/Ansiform/Internal/State.hs
module Ansiform.Internal.State where
import Ansiform.Internal.Number
import Ansiform.Internal.Page
import Ansiform.Internal.Settings
--------------------------------------------------------------------------------
import System.IO (Handle)
-- 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)
-- Resolves the state settings for stdout.
resolveStateSettings :: State -> IO Config
resolveStateSettings (State (s, _, _)) = runSettings s
-- Resolves the state settings for a given output handle.
resolveStateSettingsOn :: Handle -> State -> IO Config
resolveStateSettingsOn 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, _, _)) = formState s