{-# LANGUAGE TemplateHaskell #-} module WWW.Colors.Hex ( HexColor ) where import Data.Colour import Digrams.Attributes import Language.Haskell.TH.Quote newtype HexColor = HexColor ByteString deriving (Eq, Generic, Ord) instance Bounded HexColor where maxBound = HexColor "\255\255\255" minBound = HexColor "\NUL\NUL\NUL" instance Color HexColor where hex :: QuasiQuoter hex = QuasiQuoter { quoteExp = parseit , quotePat = failure "quotePat" , quoteType = failure "quoteType" , quoteDec = failure "quoteDec" } where failure s = const $ fail $ "No " <> s <> " defined for the hexcolor quasiquoter." parseit s = case undefined of Nothing -> fail $ "Can't understand " <> s <> " as a valid hex color." Just h -> h `seq` [|h|]