Data pointers

A value of type Ptr a represents a pointer to an object, or an
array of objects, which may be marshalled to or from Haskell values
of type a.

The type a will often be an instance of class
Foreign. Storable. Storable which provides the marshalling operations. 
However this is not essential, and you can provide your own operations
to access the pointer.  For example you might write small foreign
functions to get or set the fields of a C struct. 

Given an arbitrary address and an alignment constraint,
alignPtr yields the next higher address that fulfills the
alignment constraint.  An alignment constraint x is fulfilled by
any address divisible by x. This operation is idempotent. 

Note: this is valid only on architectures where data and function
pointers range over the same set of addresses, and should only be used
for bindings to external libraries whose interface already relies on
this assumption. 

Note: this is valid only on architectures where data and function
pointers range over the same set of addresses, and should only be used
for bindings to external libraries whose interface already relies on
this assumption. 

Release the storage associated with the given FunPtr, which
must have been obtained from a wrapper stub.  This should be called
whenever the return value from a foreign import wrapper function is
no longer required; otherwise, the storage it uses will leak.