bitmaps-0.2.5.1: src/Data/Bitmap/Reflectable.hs
{-# LANGUAGE FlexibleInstances, OverlappingInstances, UndecidableInstances #-}
module Data.Bitmap.Reflectable
( BitmapReflectable(..)
) where
import Data.Bitmap.Class
-- | Class for reflectable bitmaps
--
-- Using the functions of the 'Bitmap' class,
-- default functions are be defined for each of
-- these; of course, implementations are free
-- to write more efficient versions.
class (Bitmap bmp) => BitmapReflectable bmp where
reflectVertically :: bmp -> bmp
reflectHorizontally :: bmp -> bmp
reflectVertically b = constructPixels f dms
where dms@(_, height) = dimensions b
maxRow = abs . pred $ height
f (r, c) = getPixel b (maxRow - r, c)
reflectHorizontally b = constructPixels f dms
where dms@(width, _) = dimensions b
maxColumn = abs . pred $ width
f (r, c) = getPixel b (r, maxColumn - c)
instance (Bitmap a) => BitmapReflectable a