
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