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, Enum a) => Algebra RangeExprF [Range a]
rangeAlgebra = exportRangeMerge . iter rangeMergeAlgebra . Free . fmap (Pure . loadRanges)