On 08 November 2004 02:49, David Lo wrote: > I'm new in haskell. I'm assigned to see that a piece of Haskell code > need to be callable from C#. I find that I can convert Haskell to DLL > using ghc --mk-dll. > > I find it is fine for simple function but for the following errors are > reported. > > foreign export stdcall doComp :: Pattern -> CString -> IO () > doComp :: Pattern -> CString -> IO () > > foreign export stdcall evalDisplay :: RealFrac a => CString -> > (Int->VMC (Maybe a)) -> IO () > evalDisplay :: RealFrac a => CString -> (Int->VMC (Maybe a)) -> IO ()
It would help if you posted the entire code, rather than just a snippet. We can't tell for sure where the errors are without seeing the definitions for some of the types you've used, for example. > The errors are as follows: > > Compiling Main ( CPL.hs, interpreted ) > > CPL.hs:29: > Unacceptable argument type in foreign declaration: > forall a b c. (Ind a c, Compare c b) => Pat a b > When checking declaration: > foreign export stdcall "doComp" doComp :: Pattern-> CString > -> IO () The error indicates that you have declared a foreign exported function with a type that does not have a direct translation into a C type. The legal types for foreign exported functions are described in the FFI specification, which can be found online here: http://www.cse.unsw.edu.au/~chak/haskell/ffi/ffi.pdf > CPL.hs:107: > Unacceptable argument type in foreign declaration: {RealFrac a} > When checking declaration: > foreign export stdcall "evalDisplay" evalDisplay :: forall a. > (RealFrac a) => CString-> (Int -> VMC (Maybe a)) -> IO () > > CPL.hs:107: > Unacceptable argument type in foreign declaration: > Int -> VMC (Maybe a) > When checking declaration: > foreign export stdcall "evalDisplay" evalDisplay :: forall a. > (RealFrac a) =>CString-> (Int -> VMC (Maybe a)) -> IO () > > I would like to inquire on how to use foreign function stdcall on self > defined data structure and function. Can I just simply cast them to > string ? Perhaps you could give more details about what you want to do. What Haskell functions do you want to export to C#, and what types do they have (both in Haskell and C#)? If you want to export Haskell data structures to C#, then you have to "marshal" the data into C#, by converting the Haskell representation into a representation that C# can understand. Using strings is one possibility, but it's unlikely to be the best. Cheers, Simon _______________________________________________ Glasgow-haskell-users mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/glasgow-haskell-users