NHC's current implementation of "foreign export" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From the discussion, it seems that NHC simply allows the phrase "foreign export" in front of the normal type signature of a function (as opposed to in addition to that type signature). I never had this in mind and it has always been different in GHC and in Sigbjorn's FFI spec. In fact, being able to have
foo :: Num a => a -> a foo = ...
foreign export foo :: Int -> Int
was always sold as a feature of the system.
If I understand it, the big difference is that GHC will let you write either 2 sigs (one a normal sig, one a foreign export sig) or 1 sig (just the foreign export sig) whereas NHC lets you have just one. I think I prefer to have both because of examples like your foo. (But, Hugs doesn't implement this either because I couldn't quite figure out the typechecker hooks I needed. I regard this (and document it) as a bug.) -- Alastair Reid reid@cs.utah.edu http://www.cs.utah.edu/~reid/