Overloading and overlap

Daan Leijen daan at cs.uu.nl
Tue Apr 19 16:21:43 EDT 2005

Monique Louise wrote:

>   does anyone know about any existing extensions to FFI or even to
>GHC which incorporate access to overloaded methods, which are common
>in OO environments (.NET, Java), without using "renaming techniques" ?
I think you refer here to "overloaded methods" in the sense of methods 
with the same name
in the same class with different argument types (a la Java, or C++). 

 > class C { void foo( Int i );  void foo (Float f ): }

Note that "under the hood"
even .NET and Java use different names for each method ("renaming") to 
distinguish them.

 > class C { void foo_Int( Int i); void foo_Float( Float f); }

This compiler assigns the unoverloaded name statically once the types of 
the arguments are
known. So, when using such methods from the Haskell FFI, I think you can 
only call into the
unoverloaded names.

 > foreign import dynamic c_foo_Int :: C -> Int -> IO ()
 > foreign import dynamic c_foo_Float :: C -> Float -> IO ()

I guess you can get the overloading again by using the usual Haskell

 > class C_foo  a  where  c_foo ::  C -> a -> IO ()
 > instance C_foo Int where c_foo = c_foo_Int
 > instance C_foo Float where c_foo = c_foo_Float

I don't know of any other solution , but you may want to read
Andre Pang's master thesis (under supervision of Manuel Chackravarty)
that might have some content about this.

All the best,
 Daan Leijen.

>Thanks in advance,

More information about the FFI mailing list