module Table where
import Data.IORef (IORef, newIORef, readIORef, modifyIORef, )
create :: a -> IO (IORef a)
create = newIORef
from :: IORef a -> IO a
from = readIORef
insert :: IORef [a] -> a -> IO ()
insert ref a = modifyIORef ref (a:)
delete :: IORef [a] -> (a -> Bool) -> IO ()
delete ref p = modifyIORef ref (filter (not . p))
update :: IORef [a] -> (a -> a) -> IO ()
update ref f = modifyIORef ref (map f)
updateWhere :: IORef [a] -> (a -> a) -> (a -> Bool) -> IO ()
updateWhere ref f p = modifyIORef ref (map (\x -> if p x then f x else x))