{-# LANGUAGE Safe #-} module Data.Range.Algebra.Range where import Data.Range.Data import Data.Range.RangeInternal (exportRangeMerge, loadRanges) import Data.Range.Algebra.Internal import Control.Monad.Free rangeAlgebra :: (Ord a) => Algebra RangeExprF [Range a] rangeAlgebra :: forall a. Ord a => Algebra RangeExprF [Range a] rangeAlgebra = RangeMerge a -> [Range a] forall a. Eq a => RangeMerge a -> [Range a] exportRangeMerge (RangeMerge a -> [Range a]) -> (RangeExprF [Range a] -> RangeMerge a) -> RangeExprF [Range a] -> [Range a] forall b c a. (b -> c) -> (a -> b) -> a -> c . (RangeExprF (RangeMerge a) -> RangeMerge a) -> Free RangeExprF (RangeMerge a) -> RangeMerge a forall (f :: * -> *) a. Functor f => (f a -> a) -> Free f a -> a iter RangeExprF (RangeMerge a) -> RangeMerge a forall a. Ord a => Algebra RangeExprF (RangeMerge a) rangeMergeAlgebra (Free RangeExprF (RangeMerge a) -> RangeMerge a) -> (RangeExprF [Range a] -> Free RangeExprF (RangeMerge a)) -> RangeExprF [Range a] -> RangeMerge a forall b c a. (b -> c) -> (a -> b) -> a -> c . RangeExprF (Free RangeExprF (RangeMerge a)) -> Free RangeExprF (RangeMerge a) forall (f :: * -> *) a. f (Free f a) -> Free f a Free (RangeExprF (Free RangeExprF (RangeMerge a)) -> Free RangeExprF (RangeMerge a)) -> (RangeExprF [Range a] -> RangeExprF (Free RangeExprF (RangeMerge a))) -> RangeExprF [Range a] -> Free RangeExprF (RangeMerge a) forall b c a. (b -> c) -> (a -> b) -> a -> c . ([Range a] -> Free RangeExprF (RangeMerge a)) -> RangeExprF [Range a] -> RangeExprF (Free RangeExprF (RangeMerge a)) forall a b. (a -> b) -> RangeExprF a -> RangeExprF b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap (RangeMerge a -> Free RangeExprF (RangeMerge a) forall (f :: * -> *) a. a -> Free f a Pure (RangeMerge a -> Free RangeExprF (RangeMerge a)) -> ([Range a] -> RangeMerge a) -> [Range a] -> Free RangeExprF (RangeMerge a) forall b c a. (b -> c) -> (a -> b) -> a -> c . [Range a] -> RangeMerge a forall a. Ord a => [Range a] -> RangeMerge a loadRanges)