summaryrefslogtreecommitdiff
path: root/src/WWW/Colors/QQ.hs
blob: 4a03dbb6aa9b9163fda075f0cfcf707036606238 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{-# LANGUAGE TemplateHaskell #-}
module WWW.Colors.QQ
    ( hex
    ) where

-- import Data.Colour
-- import Data.Colour.SRGB
import Control.Monad ((>=>))
import Diagrams.Backend.CmdLine (readHexColor)
import Language.Haskell.TH.Quote



-- | QuasiQuoter which reads in a hex color code and ouputs a 'AlphaColour Double'.
hex :: QuasiQuoter
hex = QuasiQuoter
    { quoteExp = readHexColor >=> \x -> x `seq` pure [|x|]
    , quotePat = failure "quotePat"
    , quoteType = failure "quoteType"
    , quoteDec = failure "quoteDec"
    } where
        failure s = const $ fail $ "No " <> s <> " defined for the hexcolor quasiquoter."
        -- readit = sRGB24reads :: ReadS (Colour Double)
        -- parseit s =
        --     case readit s of
        --       [(x,[])] -> x `seq` [|x|]
        --       _ -> fail $ "Can't understand " <> s <> " as a valid hex color"