Message "GHC/PrimopWrappers.hs:133:29: Not in scope: `GHC.Prim.quotInteger2Exp#'" building GHC with additional primitive operation

Thorkil Naur naur at post11.tele.dk
Fri Mar 31 11:12:38 EST 2006


On Wednesday 29 March 2006 01:35, Bulat Ziganshin wrote:
> primitives work with just the same internal structures. i thinl that
> only real advantage of adding primop instead of adding FFI import is
> that PrimOps.cmm contains already implemented wrappers for calling GMP
> functions while for FFI you should implement them from scratch

Hello,

You could very well be right. In fact, the main advantage that I see of 
solving my problem by adding a new GHC primitive operation is simply that 
this solution worked for me. I have so far not been able to concoct another 
solution that uses FFI. Quite possibly for simple lack of insight.

But the "adding a new primitive operation"-method is not, of course, without 
its disadvantages. For example, now I have some additional work whenever I 
wish to use a new GHC version. And I also have to become fluent in generating 
GHC for Windows, because I also use the Windows version.

All in all, I have not at all given up the idea of solving my problem of 
interfacing directly with the GMP functions using the FFI. But, as I have 
said, I have not been able to come up with such a solution.

But perhaps you can help me out here. Suppose, for the example, that I wish to 
call the mpz_gcdext function. That function takes two integers as input and 
returns three. Here are some questions:

1. How should I declare the C (wrapper) function in Haskell?
2. What would a call of this function look like?
3. What circumstances would the implementing C (wrapper) function have to deal 
with? In particular, how would it access the two Integer input parameters? 
And how would it return the resulting three Integer results?

I should tell you that I have studied the FFI document "The Haskell 98 Foreign 
Function Interface 1.0 An Addendum to the Haskell 98 Report (Release 
Candidate 14)" in detail, not finding it particularly easy going. I am also 
familiar with the properties of the FFI as implemented by GHC. In fact, I 
have tried to call a (very simple) C function from Haskell and it actually 
worked. Unfortunately, the solution to the main problem, that of passing 
Haskell Integer typed values back and forth between Haskell and C, still 
eludes me.

(I have also seen Simon Marlow's comments to your letter. The sort of things 
that he talks about there ring bells, sure, but the details are completely 
unknown to me.)

Thank you very much for any help that you provide in this matter.

Regards Thorkil


More information about the Glasgow-haskell-users mailing list