module Control.Monad.Takahashi.Monad where
import Control.Monad.Operational
import Control.Monad.State.Class(MonadState(..))
import Control.Monad.Takahashi.HtmlBuilder
data TakahashiBase o a where
GetSlideOption :: TakahashiBase o o
PutSlideOption :: o -> TakahashiBase o ()
Slide :: HtmlBuilder Style () -> TakahashiBase o ()
type Takahashi o = Program (TakahashiBase o)
instance MonadState x (Takahashi x) where
put = putSlideOption
get = getSlideOption
getSlideOption :: Takahashi o o
getSlideOption = singleton GetSlideOption
putSlideOption :: o -> Takahashi o ()
putSlideOption v = singleton $ PutSlideOption v
slide :: HtmlBuilder Style () -> Takahashi o ()
slide f = singleton $ Slide f