The windowPoint function in Reactive/GLUT/SimpleGL.hs has the following comment:

-- | Convert a window position to a logical X,Y.  Logical zero is at the
-- origin, and [size??].
-- 
-- TODO: this def is completely broken.  What do I even want?  Probably to
-- go backward through the viewing transform to the XY plane.

The function I made in the past for doing this is:
windowPoint :: GL.Position -> IO (Double,Double)
windowPoint pos@(GL.Position x y) = 
  do
    viewport@(_,GL.Size _ height) <- get GL.viewport
    modelviewMatrix <- getMatrix $ GL.Modelview 0
    projectionMatrix <- getMatrix  $ GL.Projection
    let pos3 = GL.Vertex3 (fromIntegral x) (fromIntegral (height-y)) 0
    GL.Vertex3 vx vy _ <- GLU.unProject pos3 modelviewMatrix projectionMatrix viewport
    return (vx,vy)
  where
    getMatrix :: GL.MatrixMode -> IO(GL.GLmatrix Scalar)
    getMatrix mode = get $ GL.matrix $ Just mode