Portability | non-portable (TF,GNTD) |
---|---|
Stability | experimental |
Maintainer | hans@hanshoglund.se |
Safe Haskell | None |
Provides reversible values.
- class Reversible a where
- rev :: a -> a
- newtype NoRev a = NoRev {
- getNoRev :: a
- newtype WithRev a = WithRev (a, a)
- withRev :: Reversible a => a -> WithRev a
- fromWithRev :: Reversible a => WithRev a -> a
Reversible class
class Reversible a whereSource
Reversible values.
For instances of Reversible
and HasOnset
, the following laws should hold:
onset a = onset (rev a) duration a = duration (rev a)
For structural types, rev
is applied recursively, hence the constraint on
the Score
instance. rev
is id by default, so for a trivial type T
it
suffices to write
instance Reversible T
For instances U
of HasOnset
and Transformable
, a suitable instance
is
instance Reversible T where rev = withSameOnset (stretch (-1))
Reversible Double | |
Reversible Float | |
Reversible Int | |
Reversible Integer | |
Reversible () | |
Reversible a => Reversible [a] | |
Reversible (Ratio a) | |
(Ord a, Reversible a) => Reversible (Set a) | |
Reversible a => Reversible (WithRev a) | |
Reversible (NoRev a) | |
Reversible a => Reversible (Score a) | |
Reversible a => Reversible (TieT a) | |
Reversible (ChordT a) | |
Reversible a => Reversible (DynamicT a) | |
Reversible a => Reversible (ArticulationT a) | |
Reversible a => Reversible (SlideT a) | |
Reversible a => Reversible (HarmonicT a) | |
Reversible a => Reversible (TextT a) | |
Reversible a => Reversible (TremoloT a) | |
Reversible a => Reversible (Map k a) | |
Reversible a => Reversible (PartT p a) |
Utility
Enum a => Enum (NoRev a) | |
Eq a => Eq (NoRev a) | |
Ord a => Ord (NoRev a) | |
Show a => Show (NoRev a) | |
Monoid a => Monoid (NoRev a) | |
Semigroup a => Semigroup (NoRev a) | |
Delayable a => Delayable (NoRev a) | |
Stretchable a => Stretchable (NoRev a) | |
HasOffset a => HasOffset (NoRev a) | |
HasOnset a => HasOnset (NoRev a) | |
HasDuration a => HasDuration (NoRev a) | |
Reversible (NoRev a) |
WithRev (a, a) |
withRev :: Reversible a => a -> WithRev aSource
fromWithRev :: Reversible a => WithRev a -> aSource