diff --git a/hlrdb-core.cabal b/hlrdb-core.cabal
--- a/hlrdb-core.cabal
+++ b/hlrdb-core.cabal
@@ -1,5 +1,5 @@
 name:                hlrdb-core
-version:             0.1.0.0
+version:             0.1.1.0
 synopsis:            High-level Redis Database Core API
 description:         A library for type-driven interaction with Redis
 license:             MIT
@@ -36,6 +36,7 @@
     , mtl ^>= 2.2.2
     , profunctors ^>= 5.2.2
     , random ^>= 1.1
+    , time (>=1.6 && <1.9.1) || ^>= 1.9.1
     , unordered-containers ^>= 0.2.8.0
   hs-source-dirs:      src
   default-language:    Haskell2010
diff --git a/src/HLRDB/Core.hs b/src/HLRDB/Core.hs
--- a/src/HLRDB/Core.hs
+++ b/src/HLRDB/Core.hs
@@ -58,6 +58,12 @@
        , zcard
        , zscan
 
+         -- * Universal
+       , HLRDB.Core.del
+       , HLRDB.Core.persist
+       , HLRDB.Core.expire
+       , HLRDB.Core.expireat
+       
          -- * Re-exports from hedis
        , Redis
        , MonadRedis
@@ -72,14 +78,41 @@
        
        ) where
 
-import Database.Redis (Redis,MonadRedis,liftRedis,Cursor,cursor0)
+import Data.Time
+import Data.Time.Clock.POSIX
+import Database.Redis (Redis,MonadRedis,liftRedis,Cursor,cursor0,del,persist,expire,expireat)
 
 import HLRDB.Primitives.Aggregate
 import HLRDB.Primitives.Redis
-
+import HLRDB.Internal
 import HLRDB.Structures.Basic
 import HLRDB.Structures.List
 import HLRDB.Structures.HSet
 import HLRDB.Structures.Set
 import HLRDB.Structures.SSet
+
+-- | Delete all data for the given keys in Redis
+del :: (Traversable t , MonadRedis m) => RedisStructure v a b -> t a -> m (ActionPerformed Deletion)
+del p =
+    fmap Deleted
+  . fixEmpty' (unwrap . Database.Redis.del) (primKey p)
+
+-- | Discard any pending expirations of this key. Returns True if the key both exists and had a timeout which was removed by the command.
+persist :: MonadRedis m => RedisStructure v a b -> a -> m Bool
+persist p =
+  liftRedis . unwrap . Database.Redis.persist . primKey p
+
+-- | Expire after a given amount of time (in seconds). Returns True if the key existed and a timeout was set.
+expire :: MonadRedis m => RedisStructure v a b -> a -> Integer -> m Bool
+expire p k =
+  liftRedis . unwrap . Database.Redis.expire (primKey p k)
+
+-- | Expire at a given timestamp. Returns True if the key existed and a timeout was set.
+expireat :: MonadRedis m => RedisStructure v a b -> a -> UTCTime -> m Bool
+expireat p k =
+    liftRedis
+  . unwrap
+  . Database.Redis.expireat (primKey p k)
+  . round
+  . utcTimeToPOSIXSeconds
 
diff --git a/src/HLRDB/Internal.hs b/src/HLRDB/Internal.hs
--- a/src/HLRDB/Internal.hs
+++ b/src/HLRDB/Internal.hs
@@ -81,7 +81,7 @@
 unwrapDeleted = fmap Deleted . unwrap
 
 {-# INLINE ignore #-}
-ignore :: (Functor f) => f a -> f ()
+ignore :: Functor f => f a -> f ()
 ignore = fmap (const ())
 
 -- Redis does not treat treat zero cases properly, so use this to fix the algebra
diff --git a/src/HLRDB/Primitives/Aggregate.hs b/src/HLRDB/Primitives/Aggregate.hs
--- a/src/HLRDB/Primitives/Aggregate.hs
+++ b/src/HLRDB/Primitives/Aggregate.hs
@@ -4,6 +4,7 @@
        (
          T(..)
        , type (⟿)
+       , type (~~>)
        , type Query
        , aggregatePair
        , remember
@@ -54,6 +55,9 @@
 
 -- | A query using input of type 'a' and yielding an output of type 'b'
 type (⟿) a b = T ByteString (Maybe ByteString) a b
+
+-- | An ASCII version of ⟿
+type (~~>) a b = T ByteString (Maybe ByteString) a b
 
 -- | Non-infix alias of ⟿
 type Query a b = a ⟿ b
