Craft3e-0.1.0.4: Chapter19/Pic.hs
-----------------------------------------------------------------------
--
-- Haskell: The Craft of Functional Programming
-- Simon Thompson
-- (c) Addison-Wesley, 1996-2011.
--
-- Pic.hs
--
-- A deep embedding of pictures
--
-----------------------------------------------------------------------
module Pic where
import Pictures
-- Data type representing pictures
data Pic = Horse |
Above Pic Pic |
Beside Pic Pic |
FlipH Pic |
FlipV Pic
-- Interpreting a Pic as a Picture
interpretPic :: Pic -> Picture
interpretPic Horse = horse
interpretPic (Above pic1 pic2)
= above (interpretPic pic1) (interpretPic pic2)
interpretPic (Beside pic1 pic2)
= beside (interpretPic pic1) (interpretPic pic2)
interpretPic (FlipH pic)
= flipH (interpretPic pic)
interpretPic (FlipV pic)
= flipV (interpretPic pic)
-- Tidying up a picture ...
-- remove pairs of flips
-- push flips through placement above / beside
tidyPic :: Pic -> Pic
tidyPic (FlipV (FlipV pic))
= tidyPic pic
tidyPic (FlipV (FlipH pic))
= FlipH (tidyPic (FlipV pic))
tidyPic (FlipV (Above pic1 pic2))
= Above (tidyPic (FlipV pic1)) (tidyPic (FlipV pic2))
tidyPic (FlipV (Beside pic1 pic2))
= Beside (tidyPic (FlipV pic2)) (tidyPic (FlipV pic1))
tidyPic (FlipH (FlipH pic))
= tidyPic pic
tidyPic (FlipH (Above pic1 pic2))
= Above (tidyPic (FlipH pic2)) (tidyPic (FlipH pic1))
tidyPic (FlipH (Beside pic1 pic2))
= Beside (tidyPic (FlipH pic1)) (tidyPic (FlipH pic2))