module Data.Order.Raw (
RawOrder,
OrderCell,
RawElement,
ElementCell,
RawAlgorithm (
RawAlgorithm,
newOrder,
compareElements,
newMinimum,
newMaximum,
newAfter,
newBefore,
delete
)
) where
import Control.Monad.ST
import Data.STRef
type RawOrder a s = STRef s (OrderCell a s)
type family OrderCell a s
type RawElement a s = STRef s (ElementCell a s)
type family ElementCell a s
data RawAlgorithm a s = RawAlgorithm {
newOrder :: ST s (RawOrder a s),
compareElements :: RawOrder a s
-> RawElement a s
-> RawElement a s
-> ST s Ordering,
newMinimum :: RawOrder a s -> ST s (RawElement a s),
newMaximum :: RawOrder a s -> ST s (RawElement a s),
newAfter :: RawOrder a s -> RawElement a s -> ST s (RawElement a s),
newBefore :: RawOrder a s -> RawElement a s -> ST s (RawElement a s),
delete :: RawOrder a s -> RawElement a s -> ST s ()
}