{-# LANGUAGE GeneralizedNewtypeDeriving #-}
module Control.Monad.SFML.Types.Internal
  ( SFML(..)
  , SFMLState) where

import Control.Monad.State.Strict
import Control.Applicative


--------------------------------------------------------------------------------
type DestroyAction = IO ()


--------------------------------------------------------------------------------
type SFMLState = [DestroyAction]


--------------------------------------------------------------------------------
newtype SFML a = SFML { unSFML :: StateT SFMLState IO a }
  deriving (Functor, Applicative, Monad, MonadIO)