Îõ³h$†ùÈ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGNone %5678>ÀÁÂÎÔÙ•'interval-functor s form a H under intersection.interval-functor s form a H under the union.interval-functorf+-dimensional intervals with coordinates in a.interval-functorThe infimum, or lower bound. interval-functorThe supremum, or upper bound. interval-functor"Access the infimum of an interval. interval-functor#Access the supremum of an interval. interval-functorConstruct a square interval in f' dimensions from the given coordinates.0...1 :: Interval Identity IntIdentity 0...Identity 10...1 :: Interval V2 IntV2 0 0...V2 1 1 interval-functorConstruct a point (or  degenerate#) interval from the given endpoint.point (V2 0 1)V2 0 1...V2 0 1interval-functor(Compute the diameter of an interval, in fÆ dimensions, defined as the absolute difference between the endpoints.ØNote that the diameter of closed point intervals is zero, so this is not the interval™@s  cardinality.interval-functorÃCompute the midpoint of an interval, halfway between the endpoints. midpoint (point x) = x interval-functor1Apply a function to the endpoints of an interval.uncurryI (,) (Interval a b)(a, b)interval-functor:Lift a function over the coordinates in each dimension of f.&liftI (+) (Interval (V2 1 2) (V2 3 4))V2 4 6interval-functorEnumerate the points in f" between the interval™@s endpoints.%enum (0...1 :: Interval Identity Int)[Identity 0, Identity 1]interval-functorEnumerate the coordinates in a: between the interval™@s endpoints along each dimension of f.%liftEnum (Interval (V2 1 2) (V2 1 3)) V2 [1] [2, 3]interval-functorLinearly transform a point in f from a non-point interval of f to the unit interval. toUnit = (`transform` 0...1) toUnit i . fromUnit i = id interval-functorLinearly transform a point in f* from the unit interval to an interval of f. fromUnit = transform (0...1) fromUnit i . toUnit i = id interval-functorÒTransform a point linearly between the subspaces described by non-point intervals. transform i j (inf i) = inf j  (transform i j (midpoint i) = midpoint j  transform i j (sup i) = sup j  transform i i = id  #transform i j . transform j i = id  transform (0...1) = fromUnit (`transform` 0...1) = toUnit interval-functor:Linearly interpolate between the endpoints of an interval.  lerp 0 = inf  lerp 0.5 = midpoint   lerp 1 = sup lerp t i = fromUnit i (pure t) interval-functorClamp a point in f= to the given interval, wrapping out-of-bounds values around.9e.g. to wrap angles in radians to the interval [-pi, pi]:wrap (-pi...pi) (pi + x)Identity (-pi + x) 4wrap i (lerp t i) = lerp (snd (properFraction t)) i interval-functor*Map and fold over an interval™@s endpoints.Where I- only folds over the individual coordinates, 2 can interpret the structure of the space as well.+foldMapInterval (\ p -> [p]) (Interval a b)[a, b] (foldMap f = foldMapInterval (foldMap f) interval-functor!Map over an interval™@s endpoints.Where J, only maps over the individual coordinates,  can change the space as well.ÁmapInterval (\ (V2 x y) -> V3 x y 0) (Interval (V2 1 2) (V2 3 4))V3 1 2 0...V3 3 4 0 fmap f = mapInterval (fmap f) interval-functor&Traverse over an interval™@s endpoints.Where K1 only traverses over the individual coordinates,  can change the space as well.*:t traverseInterval (\ (V2 x y) -> V3 x y)ÎtraverseInterval (\ (V2 x y) -> V3 x y) :: Interval V2 a -> a -> Interval V3 aÆtraverseInterval (\ (V2 x y) -> V3 x y) (Interval (V2 1 2) (V2 3 4)) 0V3 1 2 0...V3 3 4 0 +traverse f = traverseInterval (traverse f)  mapInterval f = runIdentity . traverseInterval (Identity . f) interval-functor.Test a point for inclusion within an interval.interval-functor2Test an interval for validity, i.e. non-emptiness.interval-functor2Test an interval for validity, i.e. non-emptiness.interval-functor(Test whether an interval is a singleton. interval-functor6Test whether one interval is a subinterval of another. i `isSubintervalOf` i = True Èi `isSubintervalOf` j && j `isSubintervalOf` k => i `isSubintervalOf` k !interval-functor8Test whether one interval is a superinterval of another. i `isSuperintervalOf` i = True Îi `isSuperintervalOf` j && j `isSuperintervalOf` k => i `isSuperintervalOf` k "interval-functoráTest whether one interval is a proper subinterval of another (i.e. a subinterval, but not equal). $i `isProperSubintervalOf` i = False Úi `isProperSubintervalOf` j && j `isProperSubintervalOf` k => i `isProperSubintervalOf` k #interval-functoråTest whether one interval is a proper superinterval of another (i.e. a superinterval, but not equal). &i `isProperSuperintervalOf` i = False ài `isProperSuperintervalOf` j && j `isProperSuperintervalOf` k => i `isProperSuperintervalOf` k $interval-functor%Test whether two intervals intersect. i `intersects` i = True $i `intersects` j = j `intersects` i %interval-functor Take the union of two intervals.This is equivalent to the H instance for  (and for /), and is provided for clarity and convenience.&interval-functor'Take the intersection of two intervals.This is equivalent to the H instance for ., and is provided for clarity and convenience.'interval-functorL is a synonym for %.Binterval-functor1Folds over each coordinate of the endpoints. See + for folding over the endpoints themselves.Cinterval-functor0Maps over each coordinate of the endpoints. See + for mapping over the endpoints themselves.Finterval-functorThe ordering is defined by f5, with the infima taking precedence over the suprema.Ginterval-functor5Traverses over each coordinate of the endpoints. See . for traversing over the endpoints themselves.'  !"#$%&'  !"#$%& 3M4N4Ï      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIGJKGHLGMNGHOPQÒ interval-functor-0.0.0.0-inplaceData.Functor.Interval IntersectiongetIntersectionUniongetUnionIntervalinfsupinf_sup_...pointdiametermidpointuncurryIliftIenumliftEnumtoUnitfromUnit transformlerpwrapfoldMapInterval mapIntervaltraverseIntervalmemberisValidisEmptyisPointisSubintervalOfisSuperintervalOfisProperSubintervalOfisProperSuperintervalOf intersectsunion intersection$fSemigroupInterval$fFloatingInterval$fFractionalInterval $fNumInterval$fMonadTransInterval$fMonadInterval$fApplicativeInterval$fShowInterval$fSemigroupUnion$fSemigroupIntersection$fApplicativeIntersection$fEqIntersection$fFoldableIntersection$fFunctorIntersection$fMonadIntersection$fOrdIntersection$fShowIntersection$fTraversableIntersection$fApplicativeUnion $fEqUnion$fFoldableUnion$fFunctorUnion $fMonadUnion $fOrdUnion $fShowUnion$fTraversableUnion $fEqInterval$fFoldableInterval$fFunctorInterval$fGenericInterval$fGeneric1TYPEInterval $fOrdInterval$fTraversableIntervalbaseGHC.Base Semigroup Data.FoldablefoldMapfmapData.Traversabletraverse<>ltegte