{-# 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')