module Main where

import Data.List
import Data.Colour

import Graphics.Rendering.Diagrams

-- Four rotations
rs :: [Double]
rs = cycle . map (/ 4) $ [1..4]

-- Five polygons
ps :: [Diagram]
ps = cycle . map (flip regPoly 1) $ [3..7]

-- Six colors
cs :: (Ord a, Floating a) => [Colour a]
cs = cycle [red,black,green,blue,yellow,violet]

-- Rotated polygons
rps :: [Diagram]
rps = zipWith rotate rs ps

-- Colored polygons
cps :: [Diagram]
cps = zipWith fillColor cs ps 

-- Colored and rotated polygons
crps :: [Diagram]
crps = zipWith fillColor cs rps

count :: Int
count = 10

-- The rows of polygons
plines :: [Diagram]
plines = cycle [ hcat $ take count ps
               , hcat $ take count rps
               , hcat $ take count cps
               , hcat $ take count crps ]

-- The diagram
dgram :: Diagram
dgram = vcat $ take 10 plines

width :: Double
width = (fromIntegral count) * 50

main :: IO ()
main = renderAs SVG "out.svg" (Width width) dgram

