Possible runtime overhead of wrapping the IO monad?
Brian Hulley
brianh at metamilk.com
Thu Mar 30 07:13:51 EST 2006
John Meacham wrote:
> On Thu, Mar 30, 2006 at 03:50:06AM +0100, Brian Hulley wrote:
>> where the intention is that the callback will take the width and
>> height of the window and return a RenderM action, the problem is
>> that because the FFI does not allow RenderM to appear in a foreign
>> type.
>
> it should, the types in foreign declarations should "see through"
> newtypes.
Unfortunately GHC does not seem to support this:
foreign import ccall duma_clear :: Word.Word32 -> RenderM ()
Unacceptable result type in foreign declaration: RenderM ()
When checking declaration:
foreign import ccall safe "static &duma_clear"
duma_clear :: GHC.Word.Word32 -> RenderM ()
even though the FFI spec agrees with you (Section 3.2):
The argument types ati produced by fatype must be
marshallable foreign types; that is, each ati is either (1)
a basic foreign type or (2) a type synonym or renamed
datatype of a marshallable foreign type. Moreover, the
result type rt produced by frtype must be a
marshallable foreign result type; that is,
it is either a marshallable foreign type, ...
Thus leading to all the messy fiddling about I have to do to use RenderM
instead of IO in my imported functions and callbacks.
A tool like greencard may solve some of these problems but the problem I
would then have is how to incorporate it in my very flaky development
environment (I'm just using the plain text editor in Visual C++ with a
shortcut bound to a batch file which calls ghc so the build process is all
held together by bits of string and sellotape therefore I don't want to
complicate it further if at all possible...)
By the way, I think I may have been wrong about GHC not optimizing the call
to dropRenderM out of the onRender function in my last post, because when I
look at the output using -dddump-cmm (instead of -simpl) dropRenderM is not
mentioned in the code for onRender (although I'm not an expert at reading
cmm output either and it is mentioned in some other places....)
Regards, Brian.
More information about the Glasgow-haskell-users
mailing list