Îõ³h,À9È      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG0.0.0.1None ':;<=ÃÅÆÇÓÙÞá' s form a H under intersection. s form a H under the union.f+-dimensional intervals with coordinates in a.The supremum, or upper bound. The infimum, or lower bound. "Access the infimum of an interval. #Access the supremum of an interval. Construct 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 Construct a point (or  degenerate#) interval from the given endpoint.point (V2 0 1)V2 0 1...V2 0 1(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.ÃCompute the midpoint of an interval, halfway between the endpoints. midpoint (point x) = x 1Apply a function to the endpoints of an interval.uncurryI (,) (Interval a b)(a, b):Lift a function over the coordinates in each dimension of f.&liftI (+) (Interval (V2 1 2) (V2 3 4))V2 4 6Enumerate the points in f" between the interval™@s endpoints.%enum (0...1 :: Interval Identity Int)[Identity 0, Identity 1]Enumerate 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]Linearly 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 Linearly transform a point in f* from the unit interval to an interval of f. fromUnit = transform (0...1) fromUnit i . toUnit i = id Ò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 :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) Clamp 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 *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) !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) &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) .Test a point for inclusion within an interval.2Test an interval for validity, i.e. non-emptiness.2Test an interval for validity, i.e. non-emptiness.(Test whether an interval is a singleton. 6Test whether one interval is a subinterval of another. i `isSubintervalOf` i = True Èi `isSubintervalOf` j && j `isSubintervalOf` k => i `isSubintervalOf` k !8Test whether one interval is a superinterval of another. i `isSuperintervalOf` i = True Îi `isSuperintervalOf` j && j `isSuperintervalOf` k => i `isSuperintervalOf` k "á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 #å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 $%Test whether two intervals intersect. i `intersects` i = True $i `intersects` j = j `intersects` i % Take the union of two intervals.This is equivalent to the H instance for  (and for /), and is provided for clarity and convenience.&'Take the intersection of two intervals.This is equivalent to the H instance for ., and is provided for clarity and convenience.'L is a synonym for %.B1Folds over each coordinate of the endpoints. See + for folding over the endpoints themselves.C0Maps over each coordinate of the endpoints. See + for mapping over the endpoints themselves.FThe ordering is defined by f5, with the infima taking precedence over the suprema.G5Traverses over each coordinate of the endpoints. See . for traversing over the endpoints themselves.'  &$"# ! % '   !"#$%& Í      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKILMIJNIOPIJQÒ interval-functor-0.0.0.1-inplaceData.Functor.Intervalinterval-functor3 IntersectiongetIntersectionUniongetUnionIntervalsupinfinf_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$fTraversableInterval ghc-internalGHC.Internal.Base SemigroupGHC.Internal.Data.FoldablefoldMapfmapGHC.Internal.Data.Traversabletraverse<>