#2979: better support for FFI C wrappers for macros in system headers
----------------------------------+-----------------------------------------
  Reporter:  duncan               |          Owner:                  
      Type:  feature request      |         Status:  new             
  Priority:  normal               |      Milestone:  7.6.1           
 Component:  Compiler (FFI)       |        Version:  7.3             
Resolution:                       |       Keywords:                  
  Testcase:                       |      Blockedby:                  
Difficulty:  Unknown              |             Os:  Unknown/Multiple
  Blocking:                       |   Architecture:  Unknown/Multiple
   Failure:  Building GHC failed  |  
----------------------------------+-----------------------------------------

Comment(by PHO):

 > Perhaps we should have something like
 {{{
 foreign import capi unsafe "HsBase.h sigaddset"
    c_sigaddset :: {-# CType "sigset_t *" #-} Ptr CSigset -> CInt -> IO
 CInt
 }}}

 Or perhaps something like this?
 {{{
 -- Defined in somewhere around Foreign.C
 class CType a where
     cType :: a -> String

 data CSigset
 instance CType CSigset where cType = "sigset_t"
 instance CType CInt    where cType = "int" -- Defined in Foreign.C.Types
 instance CType a => CType (Ptr a) where    -- Defined in Foreign.C.Types
     cType = (++ "*") . cType

 -- Good: every types are instances of CType.
 foreign import capi unsafe "HsBase.h sigaddset"
    c_sigaddset :: Ptr CSigset -> CInt -> IO CInt

 -- Bad: Foo isn't an instance of CType, resulting in a compilation error.
 data Foo
 foreign import capi unsafe "HsBase.h sigaddset"
    c_sigaddset :: Ptr Foo -> CInt -> IO CInt

 -- OK: ccall doesn't care about CType.
 foreign import ccall unsafe "HsBase.h sigaddset"
    c_sigaddset :: Ptr CSigset -> CInt -> IO CInt
 }}}

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2979#comment:19>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to