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