{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-} import Data.Array.Accelerate as A import Data.Array.Accelerate.IO import Data.Array.Accelerate.Data.Colour.RGB import Data.Array.Accelerate.Data.Colour.Names import Data.Array.Accelerate.Interpreter as I import System.FilePath import Language.Haskell.TH as TH import Prelude as P swatch :: Colour -> Array DIM2 Word32 swatch c = I.run $ A.map packRGB $ A.fill (constant (Z:.50:.200)) (constant c) $(runQ $ do let swatches :: Q [TH.Exp] swatches = do ns <- names sequence [ [| writeImageToBMP $(stringE ("samples" "swatch" nameBase n <.> "bmp")) (swatch $(varE n)) |] | n <- ns ] names :: Q [TH.Name] names = do info <- reify ''NamedColour case info of ClassI (ClassD _ _ _ _ ds) _ -> return [ n | SigD n _ <- ds ] _ -> return [] body <- swatches return [ SigD (mkName "main") (AppT (ConT (mkName "IO")) (ConT (mkName "()"))) , FunD (mkName "main") [Clause [] (NormalB (DoE (P.map NoBindS body))) []] ] )