Consider from the c2hs documentation that this:
{#fun notebook_query_tab_label_packing as ^
`(NotebookClass nb, WidgetClass cld)' =>
{notebook `nb' ,
widget `cld' ,
alloca- `Bool' peekBool*,
alloca- `Bool' peekBool*,
alloca- `PackType' peekEnum*} -> `()'#}
generates in Haskell
notebookQueryTabLabelPacking :: (NotebookClass nb, WidgetClass cld)
=> nb -> cld -> IO (Bool, Bool, PackType)
which binds the following C function:
void gtk_notebook_query_tab_label_packing (GtkNotebook *notebook,
GtkWidget *child,
gboolean *expand,
gboolean *fill,
GtkPackType *pack_type);
Problem: Here I'm confused what the effect of alloca-
has on the left side of, i.e., `Bool'
.
Now I know that, in practice, what is happening is that alloca
is somehow generating a Ptr Bool
that peekBool
can convert into an output argument. But what I'm terribly confused about is how alloca
is doing this, given its type signature alloca :: Storable a => (Ptr a -> IO b) -> IO b
. More specifically:
Question 1. When someone calls notebookQueryTabLabelPacking
in Haskell, what does c2hs provide as argument for alloca
's first parameter (Ptr a -> IO b)
?
Question 2. In this case, what is the concrete type signature for alloca
's first paramater (Ptr a -> IO b)
? Is it (Ptr CBool -> IO CBool)
?