Passing extra arguments to marshalling functions

I have a function for checking return values of functions: checkResult :: String -> CInt -> IO () checkResult _ 0 = return () checkResult f n = fail $ f ++ " failed (" ++ show n ++ ")" Now, I want to call that on the exit value of lots of functions, like this: {#fun foo {} -> `()' `checkResult "foo"'*- #} {#fun bar {} -> `()' `checkResult "bar"'*- #} ... However, the marshallers can only be function names, not arbitrary expressions. Wouldn't it be a useful generalization to allow arbitrary expressions as marshallers? That way you could even have one-off marshallers as lambda expressions. /Björn

Björn,
I have a function for checking return values of functions:
checkResult :: String -> CInt -> IO () checkResult _ 0 = return () checkResult f n = fail $ f ++ " failed (" ++ show n ++ ")"
Now, I want to call that on the exit value of lots of functions, like this:
{#fun foo {} -> `()' `checkResult "foo"'*- #}
{#fun bar {} -> `()' `checkResult "bar"'*- #}
...
However, the marshallers can only be function names, not arbitrary expressions. Wouldn't it be a useful generalization to allow arbitrary expressions as marshallers? That way you could even have one-off marshallers as lambda expressions.
Yes I thought about having something like that. On the other hand, its also quite easy to just follow the fun hook with a where clause that introduces a name for the marshalling expression, but I admit that if its just a partial application, as in your case, even a where clause is somewhat tedious in comparison. Do you want to try adding this to c2hs? I'd be happy to include a suitable patch. Cheers, Manuel
participants (2)
-
Björn Bringert
-
Manuel M T Chakravarty