{-# LANGUAGE ExistentialQuantification #-} {-| Module : AfterEffect Description : Defines transient video or audio effects Copyright : (c) Christopher Howard, 2016 License : GPL-3 Maintainer : ch.howard@zoho.com Defines visual or audio effects which are brief but not instantaneous. -} module AfterEffect ( AfterEffect (..) ) where import Prelude (return) import Animation import Updating import Moving 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)