packages feed

edge-0.8: AfterEffect.hs

{-# LANGUAGE ExistentialQuantification #-}

module AfterEffect ( AfterEffect (..) ) where

import Animation
import Updating
import Moving

data AfterEffect =
    forall a. ( Animation a
         , Locatable a
         , Transient a
         , Audible a
         ) => AfterEffect a
  -- to be expanded algebraically

instance InternallyUpdating AfterEffect where
  preUpdate (AfterEffect a) et = AfterEffect (preUpdate a et)
  postUpdate (AfterEffect a) et = AfterEffect (postUpdate a et)

instance Transient AfterEffect where

  expired' (AfterEffect a) = expired' a

instance Audible AfterEffect where
  processAudio (AfterEffect a) wp = do a' <- processAudio a wp
                                       return (AfterEffect a')

  terminateAudio (AfterEffect a) = do a' <- terminateAudio a
                                      return (AfterEffect a')