module System.IO.Order (
newMinimum,
newMaximum,
newAfter,
newBefore
) where
import Data.Order.Element.IO.Type
import Data.Order.Representation
import qualified Data.Order.Element.Representation as ElementRep
import qualified Data.Order.Algorithm.Raw.Default as Default
import System.IO.Unsafe
newMinimum :: IO Element
newMinimum = Element <$> ElementRep.newMinimum orderRep
newMaximum :: IO Element
newMaximum = Element <$> ElementRep.newMaximum orderRep
newAfter :: Element -> IO Element
newAfter (Element elemRep) = Element <$> ElementRep.newAfter elemRep orderRep
newBefore :: Element -> IO Element
newBefore (Element elemRep) = Element <$> ElementRep.newBefore elemRep orderRep
orderRep :: OrderRep Default.OrderCell Default.ElementCell
orderRep = unsafePerformIO $ newOrderRep Default.rawAlgorithm