module Graphics.Gnuplot.Private.Display where
import qualified Graphics.Gnuplot.Private.FrameOption as Option
import qualified Graphics.Gnuplot.File as File
import qualified Data.Map as Map
import qualified Control.Monad.Trans.Reader as MR
import qualified Control.Monad.Trans.State as MS
import Control.Monad (liftM2, return, )
import Data.Monoid (Monoid, mempty, mappend, )
import Data.Semigroup (Semigroup, (<>), )
import Prelude (FilePath, String, Int, ($), (.), )
newtype Script =
Script {
runScript :: MS.StateT (Int, OptionSet) (MR.Reader FilePath) Body
}
pure :: Body -> Script
pure = Script . return
data Body =
Body {
files :: [File.T],
commands :: [String]
}
type OptionSet = Map.Map Option.T [String]
instance Semigroup Script where
Script b0 <> Script b1 = Script (liftM2 (<>) b0 b1)
instance Monoid Script where
mempty = Script $ return mempty
mappend = (<>)
instance Semigroup Body where
Body f0 c0 <> Body f1 c1 = Body (f0 <> f1) (c0 <> c1)
instance Monoid Body where
mempty = Body mempty mempty
mappend = (<>)
class C gfx where
toScript :: gfx -> Script