On Thursday 30 March 2006 14:13, Brian Hulley wrote: > 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, ...
Note that the addendum continues "...that is, it is either a marshallable foreign type, the type (), or a type matching Prelude.IO t, where t is a marshallable foreign type or ()." Nowhere is it written that 'IO t' (in itself) is a marshallable type whenever 't' is a marshallable type. [I am not sure what it means exactly if a type "matches" 'Prelude.IO t'.] Thus, GHC does nothing wrong, according to the addendum. That doesn't mean allowing IO-equivalent newtypes wouldn't be a good idea. It is just not written in the addendum. Ben _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users