-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A high level driver for the Cassandra datastore -- -- The objective is to completely isolate away the thrift layer, -- providing a more idiomatic Haskell experience working with Cassandra. -- -- Certain parts of the API was inspired by pycassa (Python client) and -- hscassandra (on Hackage). -- -- A brief explanation of modules: -- --
-- insert "testCF" "row1" [packCol ((TLong 124, TAscii "Hello"), "some content")] --class CasType a encodeCas :: CasType a => a -> ByteString decodeCas :: CasType a => ByteString -> a newtype TAscii TAscii :: ByteString -> TAscii getAscii :: TAscii -> ByteString newtype TBytes TBytes :: ByteString -> TBytes getTBytes :: TBytes -> ByteString newtype TCounter TCounter :: ByteString -> TCounter getCounter :: TCounter -> ByteString newtype TInt TInt :: Integer -> TInt getInt :: TInt -> Integer newtype TInt32 TInt32 :: Int32 -> TInt32 getInt32 :: TInt32 -> Int32 newtype TUtf8 TUtf8 :: Text -> TUtf8 getUtf8 :: TUtf8 -> Text newtype TUUID TUUID :: ByteString -> TUUID getUUID :: TUUID -> ByteString newtype TLong TLong :: Integer -> TLong getLong :: TLong -> Integer -- | Exclusive tag for composite column. You may tag the end of a composite -- range with this to make the range exclusive. See pycassa documentation -- for more information. newtype Exclusive a Exclusive :: a -> Exclusive a -- | Use the Single wrapper when you want to refer only to the first -- coolumn of a CompositeType column. newtype Single a Single :: a -> Single a instance [overlap ok] Eq TAscii instance [overlap ok] Show TAscii instance [overlap ok] Read TAscii instance [overlap ok] Ord TAscii instance [overlap ok] Eq TBytes instance [overlap ok] Show TBytes instance [overlap ok] Read TBytes instance [overlap ok] Ord TBytes instance [overlap ok] Eq TCounter instance [overlap ok] Show TCounter instance [overlap ok] Read TCounter instance [overlap ok] Ord TCounter instance [overlap ok] Eq TInt32 instance [overlap ok] Show TInt32 instance [overlap ok] Read TInt32 instance [overlap ok] Ord TInt32 instance [overlap ok] Eq TInt instance [overlap ok] Show TInt instance [overlap ok] Read TInt instance [overlap ok] Ord TInt instance [overlap ok] Eq TUUID instance [overlap ok] Show TUUID instance [overlap ok] Read TUUID instance [overlap ok] Ord TUUID instance [overlap ok] Eq TLong instance [overlap ok] Show TLong instance [overlap ok] Read TLong instance [overlap ok] Ord TLong instance [overlap ok] Eq TUtf8 instance [overlap ok] Show TUtf8 instance [overlap ok] Read TUtf8 instance [overlap ok] Ord TUtf8 instance [overlap ok] Eq a => Eq (Exclusive a) instance [overlap ok] Show a => Show (Exclusive a) instance [overlap ok] Read a => Read (Exclusive a) instance [overlap ok] Ord a => Ord (Exclusive a) instance [overlap ok] Eq a => Eq (Single a) instance [overlap ok] Show a => Show (Single a) instance [overlap ok] Read a => Read (Single a) instance [overlap ok] Ord a => Ord (Single a) instance [overlap ok] (CasType a, CasType b, CasType c, CasType d) => CasType (a, b, c, Exclusive d) instance [overlap ok] (CasType a, CasType b, CasType c) => CasType (a, b, Exclusive c) instance [overlap ok] (CasType a, CasType b) => CasType (a, Exclusive b) instance [overlap ok] (CasType a, CasType b, CasType c, CasType d) => CasType (a, b, c, d) instance [overlap ok] (CasType a, CasType b, CasType c) => CasType (a, b, c) instance [overlap ok] (CasType a, CasType b) => CasType (a, b) instance [overlap ok] CasType a => CasType (Single a) instance [overlap ok] CasType TUtf8 instance [overlap ok] CasType TLong instance [overlap ok] CasType Int instance [overlap ok] CasType TInt instance [overlap ok] CasType TInt32 instance [overlap ok] CasType TCounter instance [overlap ok] CasType TBytes instance [overlap ok] CasType TAscii instance [overlap ok] CasType ByteString instance [overlap ok] CasType Text instance [overlap ok] CasType Text instance [overlap ok] CasType String instance [overlap ok] CasType ByteString module Database.Cassandra.Types -- | A Key range selector to use with getMulti. data KeySelector -- | Just a list of keys to get Keys :: [Key] -> KeySelector -- | A range of keys to get. Remember that RandomPartitioner ranges may not -- mean much as keys are randomly assigned to nodes. KeyRange :: KeyRangeType -> Key -> Key -> Int32 -> KeySelector -- | Encodes the Key vs. Token options in the thrift API. -- -- InclusiveRange ranges are just plain intuitive range queries. -- WrapAround ranges are also inclusive, but they wrap around the -- ring. data KeyRangeType InclusiveRange :: KeyRangeType WrapAround :: KeyRangeType mkKeyRange :: KeySelector -> KeyRange -- | A column selector/filter statement for queries. -- -- Remember that SuperColumns are always fully deserialized, so we don't -- offer a way to filter columns within a SuperColumn. -- -- Column names and ranges are specified by any type that can be packed -- into a Cassandra column using the CasType typeclass. data Selector -- | Return everything in Row All :: Selector -- | Return specific columns or super-columns depending on the -- ColumnFamily ColNames :: [a] -> Selector -- | When deleting specific columns in a super column SupNames :: a -> [b] -> Selector -- | Return a range of columns or super-columns. Range :: Maybe a -> Maybe b -> Order -> Int32 -> Selector rangeStart :: Selector -> Maybe a rangeEnd :: Selector -> Maybe b rangeOrder :: Selector -> Order rangeLimit :: Selector -> Int32 -- | A default starting point for range Selector. Use this so you -- don't run into ambiguous type variables when using Nothing. -- --
-- range = Range (Nothing :: Maybe ByteString) (Nothing :: Maybe ByteString) Regular 1024 --range :: Selector showCas :: CasType a => a -> String mkPredicate :: Selector -> SlicePredicate -- | Order in a range query data Order Regular :: Order Reversed :: Order renderOrd :: Order -> Bool reverseOrder :: Order -> Order type ColumnFamily = String type Key = ByteString type ColumnName = ByteString type Value = ByteString -- | A Column is either a single key-value pair or a SuperColumn with an -- arbitrary number of key-value pairs data Column SuperColumn :: ColumnName -> [Column] -> Column Column :: ColumnName -> Value -> Maybe Int64 -> Maybe Int32 -> Column colKey :: Column -> ColumnName colVal :: Column -> Value -- | Last update timestamp; will be overridden during write/update ops colTS :: Column -> Maybe Int64 -- | A TTL after which Cassandra will erase the column colTTL :: Column -> Maybe Int32 -- | A full row is simply a sequence of columns type Row = [Column] -- | A short-hand for creating key-value Column values. This is -- pretty low level; you probably want to use packCol. col :: ByteString -> ByteString -> Column mkThriftCol :: Column -> IO Column castColumn :: ColumnOrSuperColumn -> Either CassandraException Column castCol :: Column -> Either CassandraException Column castSuperCol :: SuperColumn -> Either CassandraException Column data CassandraException NotFoundException :: CassandraException InvalidRequestException :: String -> CassandraException UnavailableException :: CassandraException TimedOutException :: CassandraException AuthenticationException :: String -> CassandraException AuthorizationException :: String -> CassandraException SchemaDisagreementException :: CassandraException ConversionException :: String -> CassandraException OperationNotSupported :: String -> CassandraException -- | Cassandra is VERY sensitive to its timestamp values. As a convention, -- timestamps are always in microseconds getTime :: IO Int64 -- | A typeclass to enable using any string-like type for row and column -- keys class CKey a toColKey :: CKey a => a -> ByteString fromColKey :: CKey a => ByteString -> Either String a -- | Raise an error if conversion fails fromColKey' :: CKey a => ByteString -> a instance Typeable CassandraException instance Show KeyRangeType instance Show Order instance Show KeySelector instance Eq Column instance Show Column instance Read Column instance Ord Column instance Eq CassandraException instance Show CassandraException instance Read CassandraException instance Ord CassandraException instance Data CassandraException instance CKey ByteString instance CKey ByteString instance CKey Text instance CKey Text instance CKey String instance CKey [ByteString] instance Exception CassandraException instance Show Selector instance Default Selector module Database.Cassandra.Basic -- | A round-robin pool of cassandra connections type CPool = Pool Cassandra -- | A (ServerName, Port) tuple type Server = (HostName, Int) -- | A localhost server with default configuration defServer :: Server -- | A single localhost server with default configuration defServers :: [Server] type KeySpace = String -- | Create a pool of connections to a cluster of Cassandra boxes -- -- Each box in the cluster will get up to n connections. The pool will -- send queries in round-robin fashion to balance load on each box in the -- cluster. createCassandraPool :: [Server] -> Int -> Int -> NominalDiffTime -> KeySpace -> IO CPool -- | All Cassy operations are designed to run inside MonadCassandra -- context. -- -- We provide a default concrete Cas datatype, but you can simply -- make your own application monads an instance of MonadCassandra -- for conveniently using all operations of this package. -- -- Please keep in mind that all Cassandra operations may raise -- CassandraExceptions at any point in time. class MonadIO m => MonadCassandra m getCassandraPool :: MonadCassandra m => m CPool type Cas a = ReaderT CPool IO a -- | Main running function when using the ad-hoc Cas monad. Just write your -- cassandra actions within the Cas monad and supply them with a -- CPool to execute. runCas :: CPool -> Cas a -> IO a -- | Get a single key-column value. getCol :: (MonadCassandra m, CasType k) => ColumnFamily -> ByteString -> k -> ConsistencyLevel -> m (Maybe Column) -- | An arbitrary get operation - slice with Selector get :: MonadCassandra m => ColumnFamily -> ByteString -> Selector -> ConsistencyLevel -> m [Column] -- | Do multiple gets in one DB hit getMulti :: MonadCassandra m => ColumnFamily -> KeySelector -> Selector -> ConsistencyLevel -> m (Map ByteString Row) -- | Insert an entire row into the db. -- -- This will do as many round-trips as necessary to insert the full row. -- Please keep in mind that each column and each column of each -- super-column is sent to the server one by one. -- --
-- insert "testCF" "row1" ONE [packCol ("column key", "some column content")]
--
insert :: MonadCassandra m => ColumnFamily -> ByteString -> ConsistencyLevel -> [Column] -> m ()
-- | Delete an entire row, specific columns or a specific sub-set of
-- columns within a SuperColumn.
delete :: MonadCassandra m => ColumnFamily -> Key -> Selector -> ConsistencyLevel -> m ()
-- | A column selector/filter statement for queries.
--
-- Remember that SuperColumns are always fully deserialized, so we don't
-- offer a way to filter columns within a SuperColumn.
--
-- Column names and ranges are specified by any type that can be packed
-- into a Cassandra column using the CasType typeclass.
data Selector
-- | Return everything in Row
All :: Selector
-- | Return specific columns or super-columns depending on the
-- ColumnFamily
ColNames :: [a] -> Selector
-- | When deleting specific columns in a super column
SupNames :: a -> [b] -> Selector
-- | Return a range of columns or super-columns.
Range :: Maybe a -> Maybe b -> Order -> Int32 -> Selector
rangeStart :: Selector -> Maybe a
rangeEnd :: Selector -> Maybe b
rangeOrder :: Selector -> Order
rangeLimit :: Selector -> Int32
-- | A default starting point for range Selector. Use this so you
-- don't run into ambiguous type variables when using Nothing.
--
-- -- range = Range (Nothing :: Maybe ByteString) (Nothing :: Maybe ByteString) Regular 1024 --range :: Selector -- | Order in a range query data Order Regular :: Order Reversed :: Order reverseOrder :: Order -> Order -- | A Key range selector to use with getMulti. data KeySelector -- | Just a list of keys to get Keys :: [Key] -> KeySelector -- | A range of keys to get. Remember that RandomPartitioner ranges may not -- mean much as keys are randomly assigned to nodes. KeyRange :: KeyRangeType -> Key -> Key -> Int32 -> KeySelector -- | Encodes the Key vs. Token options in the thrift API. -- -- InclusiveRange ranges are just plain intuitive range queries. -- WrapAround ranges are also inclusive, but they wrap around the -- ring. data KeyRangeType InclusiveRange :: KeyRangeType WrapAround :: KeyRangeType data CassandraException NotFoundException :: CassandraException InvalidRequestException :: String -> CassandraException UnavailableException :: CassandraException TimedOutException :: CassandraException AuthenticationException :: String -> CassandraException AuthorizationException :: String -> CassandraException SchemaDisagreementException :: CassandraException ConversionException :: String -> CassandraException OperationNotSupported :: String -> CassandraException -- | Cassandra is VERY sensitive to its timestamp values. As a convention, -- timestamps are always in microseconds getTime :: IO Int64 -- | Make exceptions implicit. throwing :: IO (Either CassandraException a) -> IO a -- | Wrap exceptions of the underlying thrift library into the exception -- types defined here. wrapException :: IO a -> IO a type ColumnFamily = String type Key = ByteString type ColumnName = ByteString type Value = ByteString -- | A Column is either a single key-value pair or a SuperColumn with an -- arbitrary number of key-value pairs data Column SuperColumn :: ColumnName -> [Column] -> Column Column :: ColumnName -> Value -> Maybe Int64 -> Maybe Int32 -> Column colKey :: Column -> ColumnName colVal :: Column -> Value -- | Last update timestamp; will be overridden during write/update ops colTS :: Column -> Maybe Int64 -- | A TTL after which Cassandra will erase the column colTTL :: Column -> Maybe Int32 -- | A short-hand for creating key-value Column values. This is -- pretty low level; you probably want to use packCol. col :: ByteString -> ByteString -> Column -- | Pack key-value pair into Column form ready to be written to -- Cassandra packCol :: CasType k => (k, ByteString) -> Column -- | Unpack a Cassandra Column into a more convenient (k,v) form unpackCol :: CasType k => Column -> (k, Value) -- | Pack a column key into binary, ready for submission to Cassandra packKey :: CasType a => a -> ByteString -- | A full row is simply a sequence of columns type Row = [Column] data ConsistencyLevel :: * ONE :: ConsistencyLevel QUORUM :: ConsistencyLevel LOCAL_QUORUM :: ConsistencyLevel EACH_QUORUM :: ConsistencyLevel ALL :: ConsistencyLevel ANY :: ConsistencyLevel TWO :: ConsistencyLevel THREE :: ConsistencyLevel -- | A typeclass to enable using any string-like type for row and column -- keys class CKey a toColKey :: CKey a => a -> ByteString fromColKey :: CKey a => ByteString -> Either String a -- | Raise an error if conversion fails fromColKey' :: CKey a => ByteString -> a -- | This typeclass defines and maps to haskell types that Cassandra -- natively knows about and uses in sorting and potentially validating -- column key values. -- -- All column keys are eventually sent to and received from Cassandra in -- binary form. This typeclass allows us to map some Haskell type -- definitions to their binary representation. The correct binary -- serialization is handled for you behind the scenes. -- -- For simplest cases, just use one of the string-like instances, e.g. -- ByteString, String or Text. Please keep in mind -- that these are just mapped to untyped BytesType. -- -- Remember that for special column types, such as TLong, to have -- any effect, your ColumnFamily must have been created with that -- comparator or validator. Otherwise you're just encoding/decoding -- integer values without any Cassandra support for sorting or -- correctness. -- -- The Python library pycassa has a pretty good tutorial to learn more. -- -- Tuple instances support fixed ComponentType columns. Example: -- --
-- insert "testCF" "row1" [packCol ((TLong 124, TAscii "Hello"), "some content")] --class CasType a encodeCas :: CasType a => a -> ByteString decodeCas :: CasType a => ByteString -> a newtype TAscii TAscii :: ByteString -> TAscii getAscii :: TAscii -> ByteString newtype TBytes TBytes :: ByteString -> TBytes getTBytes :: TBytes -> ByteString newtype TCounter TCounter :: ByteString -> TCounter getCounter :: TCounter -> ByteString newtype TInt TInt :: Integer -> TInt getInt :: TInt -> Integer newtype TInt32 TInt32 :: Int32 -> TInt32 getInt32 :: TInt32 -> Int32 newtype TUtf8 TUtf8 :: Text -> TUtf8 getUtf8 :: TUtf8 -> Text newtype TUUID TUUID :: ByteString -> TUUID getUUID :: TUUID -> ByteString newtype TLong TLong :: Integer -> TLong getLong :: TLong -> Integer -- | Exclusive tag for composite column. You may tag the end of a composite -- range with this to make the range exclusive. See pycassa documentation -- for more information. newtype Exclusive a Exclusive :: a -> Exclusive a instance MonadIO m => MonadCassandra (ReaderT CPool m) -- | A higher level module for working with Cassandra. -- -- All row and column keys are standardized to be of strict types. Row -- keys are Text, while Column keys are ByteString. This might change in -- the future and we may revert to entirely ByteString keys. -- -- Serialization and de-serialization of Column values are taken care of -- automatically using the ToJSON and FromJSON typeclasses. module Database.Cassandra.JSON -- | A round-robin pool of cassandra connections type CPool = Pool Cassandra -- | A (ServerName, Port) tuple type Server = (HostName, Int) -- | A localhost server with default configuration defServer :: Server -- | A single localhost server with default configuration defServers :: [Server] type KeySpace = String -- | Create a pool of connections to a cluster of Cassandra boxes -- -- Each box in the cluster will get up to n connections. The pool will -- send queries in round-robin fashion to balance load on each box in the -- cluster. createCassandraPool :: [Server] -> Int -> Int -> NominalDiffTime -> KeySpace -> IO CPool -- | All Cassy operations are designed to run inside MonadCassandra -- context. -- -- We provide a default concrete Cas datatype, but you can simply -- make your own application monads an instance of MonadCassandra -- for conveniently using all operations of this package. -- -- Please keep in mind that all Cassandra operations may raise -- CassandraExceptions at any point in time. class MonadIO m => MonadCassandra m getCassandraPool :: MonadCassandra m => m CPool type Cas a = ReaderT CPool IO a -- | Main running function when using the ad-hoc Cas monad. Just write your -- cassandra actions within the Cas monad and supply them with a -- CPool to execute. runCas :: CPool -> Cas a -> IO a -- | An arbitrary get operation - slice with Selector. -- -- Internally based on Basic.get. Table is assumed to be a regular -- ColumnFamily and contents of returned columns are cast into the target -- type. get :: (MonadCassandra m, FromJSON a, CasType k) => ColumnFamily -> RowKey -> Selector -> ConsistencyLevel -> m [(k, a)] -- | A version of get that discards the column names for the common -- scenario. Useful because you would otherwise be forced to manually -- supply type signatures to get rid of the CasType ambiguity. get_ :: (MonadCassandra m, FromJSON a) => ColumnFamily -> RowKey -> Selector -> ConsistencyLevel -> m [a] -- | Get a single column from a single row getCol :: (MonadCassandra m, FromJSON a, CasType k) => ColumnFamily -> RowKey -> k -> ConsistencyLevel -> m (Maybe a) -- | Get a slice of columns from multiple rows at once. Note that since we -- are auto-serializing from JSON, all the columns must be of the same -- data type. getMulti :: (MonadCassandra m, FromJSON a) => ColumnFamily -> KeySelector -> Selector -> ConsistencyLevel -> m (Map RowKey [(ColumnName, a)]) insertCol :: (MonadCassandra m, ToJSON a, CasType k) => ColumnFamily -> RowKey -> k -> ConsistencyLevel -> a -> m () -- | A modify function that will fetch a specific column, apply -- modification function on it and save results back to Cassandra. -- -- A b side value is returned for computational convenience. -- -- This is intended to be a workhorse function, in that you should be -- able to do all kinds of relatively straightforward operations just -- using this function. -- -- This method may throw a CassandraException for all exceptions -- other than NotFoundException. modify :: (MonadCassandra m, ToJSON a, FromJSON a, CasType k) => ColumnFamily -> RowKey -> k -> ConsistencyLevel -> ConsistencyLevel -> (Maybe a -> m (ModifyOperation a, b)) -> m b -- | Same as modify but does not offer a side value. -- -- This method may throw a CassandraException for all exceptions -- other than NotFoundException. modify_ :: (MonadCassandra m, ToJSON a, FromJSON a, CasType k) => ColumnFamily -> RowKey -> k -> ConsistencyLevel -> ConsistencyLevel -> (Maybe a -> m (ModifyOperation a)) -> m () -- | Same as the delete in the Basic module, except that it -- throws an exception rather than returning an explicit Either value. delete :: MonadCassandra m => ColumnFamily -> RowKey -> Selector -> ConsistencyLevel -> m () type RowKey = ByteString type ColumnName = ByteString -- | Possible outcomes of a modify operation data ModifyOperation a Update :: a -> ModifyOperation a Delete :: ModifyOperation a DoNothing :: ModifyOperation a type ColumnFamily = String data ConsistencyLevel :: * ONE :: ConsistencyLevel QUORUM :: ConsistencyLevel LOCAL_QUORUM :: ConsistencyLevel EACH_QUORUM :: ConsistencyLevel ALL :: ConsistencyLevel ANY :: ConsistencyLevel TWO :: ConsistencyLevel THREE :: ConsistencyLevel data CassandraException NotFoundException :: CassandraException InvalidRequestException :: String -> CassandraException UnavailableException :: CassandraException TimedOutException :: CassandraException AuthenticationException :: String -> CassandraException AuthorizationException :: String -> CassandraException SchemaDisagreementException :: CassandraException ConversionException :: String -> CassandraException OperationNotSupported :: String -> CassandraException -- | A column selector/filter statement for queries. -- -- Remember that SuperColumns are always fully deserialized, so we don't -- offer a way to filter columns within a SuperColumn. -- -- Column names and ranges are specified by any type that can be packed -- into a Cassandra column using the CasType typeclass. data Selector -- | Return everything in Row All :: Selector -- | Return specific columns or super-columns depending on the -- ColumnFamily ColNames :: [a] -> Selector -- | When deleting specific columns in a super column SupNames :: a -> [b] -> Selector -- | Return a range of columns or super-columns. Range :: Maybe a -> Maybe b -> Order -> Int32 -> Selector rangeStart :: Selector -> Maybe a rangeEnd :: Selector -> Maybe b rangeOrder :: Selector -> Order rangeLimit :: Selector -> Int32 -- | A default starting point for range Selector. Use this so you -- don't run into ambiguous type variables when using Nothing. -- --
-- range = Range (Nothing :: Maybe ByteString) (Nothing :: Maybe ByteString) Regular 1024 --range :: Selector -- | Order in a range query data Order Regular :: Order Reversed :: Order reverseOrder :: Order -> Order data KeySelector Keys :: [RowKey] -> KeySelector KeyRange :: KeyRangeType -> RowKey -> RowKey -> Int32 -> KeySelector -- | Encodes the Key vs. Token options in the thrift API. -- -- InclusiveRange ranges are just plain intuitive range queries. -- WrapAround ranges are also inclusive, but they wrap around the -- ring. data KeyRangeType InclusiveRange :: KeyRangeType WrapAround :: KeyRangeType -- | A typeclass to enable using any string-like type for row and column -- keys class CKey a toColKey :: CKey a => a -> ByteString fromColKey :: CKey a => ByteString -> Either String a -- | Raise an error if conversion fails fromColKey' :: CKey a => ByteString -> a -- | This typeclass defines and maps to haskell types that Cassandra -- natively knows about and uses in sorting and potentially validating -- column key values. -- -- All column keys are eventually sent to and received from Cassandra in -- binary form. This typeclass allows us to map some Haskell type -- definitions to their binary representation. The correct binary -- serialization is handled for you behind the scenes. -- -- For simplest cases, just use one of the string-like instances, e.g. -- ByteString, String or Text. Please keep in mind -- that these are just mapped to untyped BytesType. -- -- Remember that for special column types, such as TLong, to have -- any effect, your ColumnFamily must have been created with that -- comparator or validator. Otherwise you're just encoding/decoding -- integer values without any Cassandra support for sorting or -- correctness. -- -- The Python library pycassa has a pretty good tutorial to learn more. -- -- Tuple instances support fixed ComponentType columns. Example: -- --
-- insert "testCF" "row1" [packCol ((TLong 124, TAscii "Hello"), "some content")] --class CasType a encodeCas :: CasType a => a -> ByteString decodeCas :: CasType a => ByteString -> a newtype TAscii TAscii :: ByteString -> TAscii getAscii :: TAscii -> ByteString newtype TBytes TBytes :: ByteString -> TBytes getTBytes :: TBytes -> ByteString newtype TCounter TCounter :: ByteString -> TCounter getCounter :: TCounter -> ByteString newtype TInt TInt :: Integer -> TInt getInt :: TInt -> Integer newtype TInt32 TInt32 :: Int32 -> TInt32 getInt32 :: TInt32 -> Int32 newtype TUtf8 TUtf8 :: Text -> TUtf8 getUtf8 :: TUtf8 -> Text newtype TUUID TUUID :: ByteString -> TUUID getUUID :: TUUID -> ByteString newtype TLong TLong :: Integer -> TLong getLong :: TLong -> Integer -- | Exclusive tag for composite column. You may tag the end of a composite -- range with this to make the range exclusive. See pycassa documentation -- for more information. newtype Exclusive a Exclusive :: a -> Exclusive a instance Eq a => Eq (ModifyOperation a) instance Show a => Show (ModifyOperation a) instance Ord a => Ord (ModifyOperation a) instance Read a => Read (ModifyOperation a)