HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Moduletidal-1.9.5Haskell2010

Sound.Tidal.Time

  • 3 types
  • 17 values
  • Packagetidal-1.9.5
  • Exports20
  • LanguageHaskell2010
  • LicenceGPL-3.0-only
  • SourceTime.hs
datadata ArcF a
#

An arc of time, with a start time (or onset) and a stop time (or offset)

Constructors

Instances12Functor, Applicative, Eq, Fractional, Num, Ord, …

Utility functions - Time

5 declarations
valuesam :: Time -> Time
#

The sam (start of cycle) for the given time value. Cycles have duration 1, so every integer Time value divides two cycles.

valuetoTime :: Real a => a -> Rational
#

Turns a number into a (rational) time value. An alias for toRational.

valuefromTime :: Fractional a => Time -> a
#

Turns a (rational) time value into another number. An alias for fromRational.

valuenextSam :: Time -> Time
#

The end point of the current cycle (and starting point of the next cycle)

valuecyclePos :: Time -> Time
#

The position of a time value relative to the start of its cycle.

Utility functions - Arc

12 declarations
valuesubArc :: Arc -> Arc -> Maybe Arc
#

subArc i j is the timespan that is the intersection of i and j. intersection The definition is a bit fiddly as results might be zero-width, but not at the end of an non-zero-width arc - e.g. (0,1) and (1,2) do not intersect, but (1,1) (1,1) does.

valuetimeToCycleArc :: Time -> Arc
#

The Arc returned is the cycle that the Time falls within.

Edge case: If the Time is an integer, the Arc claiming it is the one starting at that Time, not the previous one ending at that Time.

valuecycleArc :: Arc -> Arc
#

Shifts an Arc to one of equal duration that starts within cycle zero. (Note that the output Arc probably does not start *at* Time 0 -- that only happens when the input Arc starts at an integral Time.)

valuecyclesInArc :: Integral a => Arc -> [a]
#

Returns the numbers of the cycles that the input Arc overlaps (excluding the input Arc's endpoint, unless it has duration 0 -- see "Edge cases" below). (The "cycle number" of an Arc is equal to its start value. Thus, for instance, cyclesInArc (Arc 0 1.5) == [0,1].)

Edge cases: > cyclesInArc $ Arc 0 1.0001 == [0,1] > cyclesInArc $ Arc 0 1 == [0] -- the endpoint is excluded > cyclesInArc $ Arc 1 1 == [1] -- unless the Arc has duration 0

PITFALL: Don't be fooled by the name. The output cycles are not necessarily completely contained in the input Arc, but they definitely overlap it, and they include every cycle that overlaps it.

valuecycleArcsInArc :: Arc -> [Arc]
#

This provides exactly the same information as cyclesInArc, except that this represents its output as Arcs, whereas cyclesInArc represents the same information as integral indices. (The Arc from 0 to 1 corresponds to the index 0, the one from 1 to 2 has index 1, etc.)

valuearcCycles :: Arc -> [Arc]
#

Splits the given Arc into a list of Arcs, at cycle boundaries.

valuemapCycle :: (Time -> Time) -> Arc -> Arc
#

Similar to fmap but time is relative to the cycle (i.e. the sam of the start of the arc)

valueisIn :: Arc -> Time -> Bool
#

isIn a t is True if t is inside the arc represented by a.