C Header File Conversion

dominic.j.steinitz@britishairways.com dominic.j.steinitz@britishairways.com
Sat, 4 May 2002 18:30:15 +0100


I need to use values that are kept in a C header file - see below for an
extract of the header file. What I'd like to be able to say is

import Word
import Bits

data ICMPType = EchoReply
              | ICMPType1
              | ICMPType2
              | DestUnreach
              | SourceQuench ...
   deriving Enum

encode :: ICMPType -> Word8
encode x = fromIntegral (fromEnum x)

Is this a sensible approach? Are there any tools that could help?
C->Haskell and HaskellDirect look possibilities but I'd welcome advice
before I try and install them.

Many thanks, Dominic.

#define ICMP_ECHOREPLY          0       /* Echo Reply                   */
#define ICMP_DEST_UNREACH       3       /* Destination Unreachable      */
#define ICMP_SOURCE_QUENCH      4       /* Source Quench                */
#define ICMP_REDIRECT           5       /* Redirect (change route)      */
#define ICMP_ECHO               8       /* Echo Request                 */
#define ICMP_TIME_EXCEEDED      11      /* Time Exceeded                */
#define ICMP_PARAMETERPROB      12      /* Parameter Problem            */
#define ICMP_TIMESTAMP          13      /* Timestamp Request            */
#define ICMP_TIMESTAMPREPLY     14      /* Timestamp Reply              */
#define ICMP_INFO_REQUEST       15      /* Information Request          */
#define ICMP_INFO_REPLY         16      /* Information Reply            */
#define ICMP_ADDRESS            17      /* Address Mask Request         */
#define ICMP_ADDRESSREPLY       18      /* Address Mask Reply           */
#define NR_ICMP_TYPES           18