module Data.Choose.IOBase
where
import Control.Monad
import Control.Monad.ST
import Data.Choose.Base
newtype IOChoose = IOChoose (STChoose RealWorld) deriving Eq
newIOChoose :: Int -> Int -> IO (IOChoose)
newIOChoose n k = liftM IOChoose $ stToIO (newSTChoose n k)
newIOChoose_ :: Int -> Int -> IO (IOChoose)
newIOChoose_ n k = liftM IOChoose $ stToIO (newSTChoose_ n k)
getPossibleIOChoose :: IOChoose -> IO Int
getPossibleIOChoose (IOChoose c) = stToIO $ getPossibleSTChoose c
possibleIOChoose :: IOChoose -> Int
possibleIOChoose (IOChoose c) = possibleSTChoose c
getSizeIOChoose :: IOChoose -> IO Int
getSizeIOChoose (IOChoose c) = stToIO $ getSizeSTChoose c
sizeIOChoose :: IOChoose -> Int
sizeIOChoose (IOChoose c) = sizeSTChoose c
unsafeGetElemIOChoose :: IOChoose -> Int -> IO Int
unsafeGetElemIOChoose (IOChoose c) i = stToIO $ unsafeGetElemSTChoose c i
unsafeSetElemIOChoose :: IOChoose -> Int -> Int -> IO ()
unsafeSetElemIOChoose (IOChoose c) i x = stToIO $ unsafeSetElemSTChoose c i x
getElemsIOChoose :: IOChoose -> IO [Int]
getElemsIOChoose (IOChoose c) = stToIO $ getElemsSTChoose c
setElemsIOChoose :: IOChoose -> [Int] -> IO ()
setElemsIOChoose (IOChoose c) is = stToIO $ setElemsSTChoose c is
unsafeFreezeIOChoose :: IOChoose -> IO Choose
unsafeFreezeIOChoose (IOChoose c) = stToIO $ unsafeFreezeSTChoose c
unsafeThawIOChoose :: Choose -> IO (IOChoose)
unsafeThawIOChoose c = liftM IOChoose $ stToIO (unsafeThawSTChoose c)