module RingBuffers.Lifted
( RingBuffer
, new
, clear
, append
, extend
, capacity
, filledLength
, latest
, unsafeLatest
, foldMap
, toList
) where
import qualified RingBuffers.Internal as I
newtype RingBuffer a = RingBuffer (I.RingBuffer Array a)
new :: ()
=> Int
-> IO (RingBuffer a)
new sz = fmap coerce (I.new sz)
clear :: ()
=> RingBuffer a
-> IO ()
clear rb = I.clear (coerce rb)
filledLength :: ()
=> RingBuffer a
-> IO Int
filledLength rb = I.filledLength (coerce rb)
capacity :: ()
=> RingBuffer a
-> IO Int
capacity rb = I.capacity (coerce rb)
latest :: ()
=> RingBuffer a
-> Int
-> IO (Maybe a)
latest rb n = I.latest (coerce rb) n
unsafeLatest :: ()
=> RingBuffer a
-> Int
-> IO a
unsafeLatest rb n = I.unsafeLatest (coerce rb) n
append :: ()
=> a
-> RingBuffer a
-> IO ()
append x rb = I.append x (coerce rb)
extend :: ()
=> Array a
-> RingBuffer a
-> IO ()
extend x rb = I.extend x (coerce rb)
foldMap :: (Monoid b)
=> RingBuffer a
-> (a -> IO b)
-> IO b
foldMap rb action = I.foldMap (coerce rb) action
toList :: ()
=> RingBuffer a
-> IO [a]
toList rb = I.toList (coerce rb)