--- Paul Hudak: Sierpinski Triangle --- See: The Haskell School of Expression, Chapter 3 import SOEGraphics spaceClose :: Window -> IO () spaceClose w = do k <- getKey w if k == ' ' then closeWindow w else spaceClose w fillTri :: Window -> Int -> Int -> Int -> IO () fillTri w x y size = drawInWindow w (withColor Blue (polygon [(x,y), (x+size, y), (x,y-size), (x,y)])) minSize :: Int minSize = 18 sierpinskiTri :: Window -> Int -> Int -> Int -> IO () sierpinskiTri w x y size = if size <= minSize then fillTri w x y size else let size2 = size `div` 2 in do sierpinskiTri w x y size2 sierpinskiTri w x (y-size2) size2 sierpinskiTri w (x+size2) y size2 main0 = runGraphics ( do w <- openWindow "Sierpinski Triangle" (350, 350) sierpinskiTri w 50 300 256 spaceClose w)