    -- |The HDF5 C type @hid_t@ is used to represent many, many different things.
    -- In this Haskell interface, it is always wrapped up in a newtype
    -- indicating its intent.  These newtypes all need to be convertible to
    -- and from 'HId_t' in order to actually use them with the raw bindings.
    -- This modules provides a standard interface for doing so.
    module Bindings.HDF5.Core.HId where

    import Bindings.HDF5.Raw.H5I

    -- |Types which can be converted to 'HId_t' (i.e., those which can be passed
    -- to HDF5 functions)
    class HId t where
        hid         :: t -> HId_t

    -- |Types which can be converted from 'HId_t' (i.e., those which can be
    -- returned by HDF5 functions)
    class FromHId t where
        uncheckedFromHId :: HId_t -> t

    instance HId HId_t where
        hid :: HId_t -> HId_t
    hid = HId_t -> HId_t
    forall a. a -> a
    id

    instance FromHId HId_t where
        uncheckedFromHId :: HId_t -> HId_t
    uncheckedFromHId = HId_t -> HId_t
    forall a. a -> a
    id

    -- |HId types which can also serve as containers for other objects
    class HId t => Location t where