module Music.Time.Nominal where
import Control.Applicative
import Control.Monad
import Control.Monad.Compose
import Control.Monad.Plus
import Data.Foldable (Foldable)
import qualified Data.Foldable as Foldable
import Data.Traversable (Traversable)
import qualified Data.Traversable as T
import Data.Typeable
import Music.Time.Split
import Music.Time.Reverse
newtype Nominal f a = Nominal { getNominal :: f a }
deriving (
Eq,
Ord,
Read,
Show,
Functor,
Foldable,
Traversable,
Monad
)
instance Applicative f => Applicative (Nominal f) where
pure = Nominal . pure
Nominal f <*> Nominal x = Nominal (f <*> x)
instance Transformable (Nominal f a) where
transform _ = id
instance Splittable (Nominal f a) where
split _ x = (x,x)
instance Reversible (f a) => Reversible (Nominal f a) where
rev (Nominal x) = Nominal (rev x)