{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, FlexibleContexts #-}
module Data.Ring.Algebra
    ( module Data.Ring.Module
    , RAlgebra
    ) where

import Data.Ring.Module

-- | Algebra over a (near) (semi) ring.
--
-- @r *. (x * y) = (r *. x) * y = x * (r *. y)@
--
-- @(x * y) .* r = y * (x .* r) = (y .* r) * x@
class (r `Module` m, Multiplicative m) => RAlgebra r m