{-# LANGUAGE ExistentialQuantification #-} module AfterEffect ( AfterEffect (..) ) where import Animation (Audible(..), Animation(..)) import Updating (InternallyUpdating(..), Transient(..)) import Moving (Locatable(..)) data AfterEffect = forall a. ( Animation a , Locatable a , Transient a , Audible a ) => AfterEffect a 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) c = do b <- processAudio a c return (AfterEffect b) terminateAudio (AfterEffect a) = do b <- terminateAudio a return (AfterEffect b)