
Hello, Here the signature of one of my C function -- hkl.h -- typedef struct _HklFactory HklFactory; HKLAPI HklFactory **hkl_factory_get_all(size_t *n) HKL_ARG_NONNULL(1); HKLAPI HklFactory *hkl_factory_get_by_name(const char *name, GError **error) HKL_ARG_NONNULL(1) HKL_WARN_UNUSED_RESULT; HKLAPI const char *hkl_factory_name_get(const HklFactory *self) HKL_ARG_NONNULL(1); HKLAPI HklGeometry *hkl_factory_create_new_geometry(const HklFactory *self) HKL_ARG_NONNULL(1); HKLAPI HklEngineList *hkl_factory_create_new_engine_list(const HklFactory *self) HKL_ARG_NONNULL(1); I will focuss for now only the get_all method. As you can see even for the C client of my API HklFactory is an opac struct This get_all method return an array of (HklFactory *) and get the size of the array via the n parameter. So I am trying to use this API from haskell with the foreign system and return a [HklFactory] import Foreign (Ptr, peek) import Foreign.Marshal.Alloc (alloca) import Foreign.Marshal.Array (peekArray) data HklFactory foreign import ccall safe "hkl.h hkl_factory_get_all" c_hkl_factory_get_all :: Ptr Int -> IO (Ptr HklFactory) hklFactoryGetAll :: IO [HklFactory] hklFactoryGetAll = alloca $ \n -> do factories <- c_hkl_factory_get_all n peekArray n factories but indeed it doesn not work, peekArray complain that n is Ptr Int instead of Int. what should I do in order to get my array of HklFactory thanks for your help. Frederic