type synonyms in instances...

Sven Panne Sven.Panne at aedion.de
Sun Jul 18 13:07:05 EDT 2004


MR K P SCHUPKE wrote:
> [...] It just tidies up a few long instances.

... and results in far better documentation when Haddock is used. That's just
another use for the oh-so-ugly cpp.  :-]   A small excerpt from my OpenGL
binding:

-- OpenGL/include/HsOpenGLTypes.h -------------------------------------------
...
/* Using a type synonym in an instance head is not Haskell98, but it is much
    better for a useful documentation. */
#ifdef __HADDOCK__
#define GLbyte_   GLbyte
#define GLdouble_ GLdouble
#define GLfloat_  GLfloat
#define GLint_    GLint
#define GLshort_  GLshort
#define GLubyte_  GLubyte
#define GLuint_   GLuint
#define GLushort_ GLushort
#else
#define GLbyte_   HTYPE_GLBYTE
#define GLdouble_ HTYPE_GLDOUBLE
#define GLfloat_  HTYPE_GLFLOAT
#define GLint_    HTYPE_GLINT
#define GLshort_  HTYPE_GLSHORT
#define GLubyte_  HTYPE_GLUBYTE
#define GLuint_   HTYPE_GLUINT
#define GLushort_ HTYPE_GLUSHORT
#endif

-- -OpenGL/Graphics/Rendering/OpenGL/GL/BasicTypes.hs -----------------------
...
-- | Signed 2\'s complement binary integer (min. 32 bits)
type GLint = HTYPE_GLINT

-- OpenGL/Graphics/Rendering/OpenGL/GL/Rectangles.hs ------------------------
...
instance Rect GLint_ where
    ...

-----------------------------------------------------------------------------

The HTYPE_FOO are autoconf-detected types like Int32 etc. Without this cpp-trickery
the documentation for the classes/instances/types involved would be much worse.
It would be nice if the next Haskell standard supported this more directly.

Cheers,
    S.



More information about the Glasgow-haskell-users mailing list