{-# Language FunctionalDependencies #-}
--------------------------------------------------------------------------------
-- |
-- Module      :  Data.Measured.Class
-- Copyright   :  (C) Frank Staals
-- License     :  see the LICENSE file
-- Maintainer  :  Frank Staals
--------------------------------------------------------------------------------
module Data.Measured.Class where

-- | Things that can be measured.
class Semigroup v => Measured v a | a -> v where
  measure :: a -> v

-- | Things that can be inserted.
class Measured v a => CanInsert v a where
  insertA :: a -> v -> v

-- | Things that can be deleted.
class Measured v a => CanDelete v a where
  deleteA :: a -> v -> Maybe v