{-# OPTIONS_HADDOCK hide #-}

{-# LANGUAGE NoImplicitPrelude #-}

module Imj.Graphics.Class.Colorable
            ( Colorable(..)
            ) where


import           Control.Monad.IO.Class(MonadIO)
import           Control.Monad.Reader.Class(MonadReader)

import           Imj.Graphics.Class.Draw
import           Imj.Graphics.Color.Types

-- | A 'Colorable' is a colourless graphical element.
class Colorable a where-- TODO add HasPosition constraint here
  -- | To draw a 'Colorable', we need to pass a 'LayeredColor'.
  drawUsingColor :: (Draw e, MonadReader e m, MonadIO m)
                 => a -> LayeredColor -> m ()