order-maintenance-0.2.0.0: src/library/System/IO/Order.hs
module System.IO.Order (
newMinimum,
newMaximum,
newAfter,
newBefore
) where
-- Data
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
-- System
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
{-# NOINLINE orderRep #-}
orderRep :: OrderRep Default.OrderCell Default.ElementCell
orderRep = unsafePerformIO $ newOrderRep Default.rawAlgorithm