content: import Graphics.Rendering.OpenGL.GL
  import Graphics.UI.GLUT.Objects
  import Graphics.UI.GLUT
  
  setProjection :: IO ()
  setProjection = do
    matrixMode $= Projection
    ortho (-1) 1 (-1) 1 0 (-1)
  
  grey1,grey9,red,white :: Color4 GLfloat
  grey1 = Color4 0.1 0.1 0.1 1
  grey9 = Color4 0.9 0.9 0.9 1
  red   = Color4 1   0   0   1
  white = Color4 1   1   1   1
  
  setLights :: IO ()
  setLights = do
    let l = Light 0
    ambient  l $= grey1
    diffuse  l $= white
    specular l $= white
    position l $= Vertex4 (-4) 4 3 (0 :: GLfloat)
    light    l $= Enabled
    lighting   $= Enabled
  
  setMaterial :: IO ()
  setMaterial = do
    materialAmbient   Front $= grey1
    materialDiffuse   Front $= red
    materialSpecular  Front $= grey9
    materialShininess Front $= (32 :: GLfloat)
  
  display :: IO()
  display = do
    clear [ColorBuffer]
    renderObject Solid $ Sphere' 0.8 64 64
    swapBuffers
  
  main :: IO()
  main = do
    _ <- getArgsAndInitialize
    _ <- createWindow "Sphere"
    clearColor $= Color4 0.0 0.0 0.0 0.0
    setProjection
    setLights
    setMaterial
    displayCallback $= display
    mainLoop
  