never executed always true always false
    1 module HelVM.HelMA.Automata.Piet.Types.Image
    2   ( Image (..)
    3   , heightImage
    4   , inRangeImage
    5   , newImage
    6   , pixelImage
    7   , setPixelImage
    8   , witdthImage
    9   ) where
   10 
   11 import           HelVM.HelMA.Automata.Piet.Types.Coordinates
   12 
   13 import           Data.Array.Diff
   14 
   15 witdthImage ∷ Image a → Int
   16 witdthImage = fst . dimensionsImage
   17 
   18 heightImage ∷ Image a → Int
   19 heightImage = snd . dimensionsImage
   20 
   21 dimensionsImage ∷ Image a → Coordinates
   22 dimensionsImage (Image pixels) = (maxX - minX + 1, maxY - minY + 1) where ((minX, minY), (maxX, maxY)) = bounds pixels
   23 
   24 inRangeImage ∷ Coordinates → Image a → Bool
   25 inRangeImage (x, y) img = 0 <= x && x < witdthImage img && 0 <= y && y < heightImage img
   26 
   27 pixelImage ∷ Coordinates → Image a → a
   28 pixelImage (x, y) img = pixels img ! (x, y)
   29 
   30 setPixelImage ∷ Coordinates → a → Image a → Image a
   31 setPixelImage (x, y) pixel img = img { pixels = pixels img // [((x, y), pixel)] }
   32 
   33 newImage ∷ Coordinates → [(Coordinates, a)] → Image a
   34 newImage (width, height) = Image . array ((0, 0), (width - 1, height - 1))
   35 
   36 instance Functor Image where
   37   fmap f img = img { pixels = amap f (pixels img) }
   38 
   39 newtype Image a
   40   = Image { pixels :: DiffArray Coordinates a }
   41   deriving stock (Show)