module Graphics.UI.FreeGame.Data.Wave ( Wave(..) , _WaveData , _WaveHash , toWave , makeWave ) where import Data.Hashable import System.Random data Wave = WaveData [(Float, Float)] Int -- | @'_WaveData' :: Lens' 'Wave' [(Float, Float)]@ _WaveData :: Functor f => ([(Float, Float)] -> f [(Float, Float)]) -> Wave -> f Wave _WaveData f (WaveData a h) = fmap (\a' -> WaveData a' h) (f a) -- | @'_WaveHash' :: Lens' 'Wave' ('Int')@ _WaveHash :: Functor f => (Int -> f Int) -> Wave -> f Wave _WaveHash f (WaveData a h) = fmap (\h' -> WaveData a h') (f h) toWave :: [(Float, Float)] -> Wave toWave w = WaveData w (hash w) makeWave :: [(Float, Float)] -> IO Wave makeWave w = fmap (WaveData w) randomIO