module Data.Prizm.Types
( HexRGB(..)
, Percent
, ColorCoord(..)
, (<$$$>)
, (<***>)
) where
import Data.Monoid
import Data.Text
(<$$$>) :: (a -> b) -> (a,a,a) -> (b,b,b)
(<$$$>) f (a1,a2,a3) = (f a1, f a2, f a3)
(<***>) :: ((a -> b), (a -> b), (a -> b)) -> (a,a,a) -> (b,b,b)
(<***>) (fa1, fa2, fa3) (b1,b2,b3) = (fa1 b1, fa2 b2, fa3 b3)
newtype ColorCoord a = ColorCoord (a, a, a)
deriving (Show, Eq, Ord, Read)
newtype HexRGB = HexRGB { unHexRGB :: Text }
deriving (Show, Eq, Ord, Read)
type Percent = Integer
instance Functor ColorCoord where
fmap f (ColorCoord (a,b,c)) = ColorCoord (f a, f b, f c)
instance Applicative ColorCoord where
pure c = ColorCoord (c,c,c)
(ColorCoord (fa,fb,fc)) <*> (ColorCoord (a,b,c)) = ColorCoord (fa a, fb b, fc c)
instance Foldable ColorCoord where
foldMap f (ColorCoord (a,b,c)) = f a <> f b <> f c
instance Traversable ColorCoord where
traverse f (ColorCoord (a,b,c)) = ColorCoord <$> ((,,) <$> f a <*> f b <*> f c)
instance Monad ColorCoord where
ColorCoord (a,b,c) >>= f = ColorCoord (a',b',c')
where
ColorCoord(a',_,_) = f a
ColorCoord(_,b',_) = f b
ColorCoord(_,_,c') = f c