-- |
-- Module      : Data.Unicode.Properties.BitArray
-- Copyright   : (c) 2017 Harendra Kumar
--
-- License     : BSD-style
-- Maintainer  : harendra.kumar@gmail.com
-- Stability   : experimental
--
module Data.Unicode.Properties.BitArray
(bitArraySetBits)
where

import Control.Monad
import Control.Monad.ST
import Data.BitArray.ST

import Data.BitArray (BitArray)

-- | Initialize a bitarray with default bits as False and bits supplied in the
-- list argument set as True.
--
bitArraySetBits :: (Int,Int) -> [Int] -> BitArray
bitArraySetBits :: (Int, Int) -> [Int] -> BitArray
bitArraySetBits range :: (Int, Int)
range xs :: [Int]
xs = (forall s. ST s BitArray) -> BitArray
forall a. (forall s. ST s a) -> a
runST ((forall s. ST s BitArray) -> BitArray)
-> (forall s. ST s BitArray) -> BitArray
forall a b. (a -> b) -> a -> b
$ do
  STBitArray s
ar <- (Int, Int) -> Bool -> ST s (STBitArray s)
forall s. (Int, Int) -> Bool -> ST s (STBitArray s)
newBitArray (Int, Int)
range Bool
False
  [Int] -> (Int -> ST s ()) -> ST s ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [Int]
xs ((Int -> ST s ()) -> ST s ()) -> (Int -> ST s ()) -> ST s ()
forall a b. (a -> b) -> a -> b
$ \i :: Int
i -> do
    STBitArray s -> Int -> Bool -> ST s ()
forall s. STBitArray s -> Int -> Bool -> ST s ()
writeBit STBitArray s
ar Int
i Bool
True
  STBitArray s -> ST s BitArray
forall s. STBitArray s -> ST s BitArray
unsafeFreezeBitArray STBitArray s
ar