{-# LANGUAGE ExistentialQuantification #-} module SpaceJunk where import Animation ( Animation (..) ) import Updating ( InternallyUpdating (..) ) import Moving ( Colliding (..) , Moving (..) , Locatable (..) ) import Combat ( Damaging (..) , Damageable (..) ) data SpaceJunk = forall a. ( InternallyUpdating a , Colliding a , Damaging a , Damageable a , Animation a ) => SpaceJunk a instance Damaging SpaceJunk where damageEnergy (SpaceJunk a) = damageEnergy a instance Damageable SpaceJunk where inflictDamage (SpaceJunk a) et = SpaceJunk (inflictDamage a et) instance InternallyUpdating SpaceJunk where preUpdate (SpaceJunk a) et = SpaceJunk (preUpdate a et) postUpdate (SpaceJunk a) et = SpaceJunk (postUpdate a et) instance Colliding SpaceJunk where collisionRadius (SpaceJunk a) = collisionRadius a instance Moving SpaceJunk where velocity (SpaceJunk a) = velocity a instance Locatable SpaceJunk where center (SpaceJunk a) = center a instance Animation SpaceJunk where image (SpaceJunk a) = image a