[Haskell-cafe] RE: Modelling Java Interfaces with Existential data types

André Pang ozone at algorithm.com.au
Wed Jun 9 18:53:24 EDT 2004


On 10/06/2004, at 3:29 AM, Mike Aizatsky wrote:

>> thanks for your time to look into the HList paper.
>
> It's quite good. It reminds me the quirks Alexandrescu does in his 
> "Modern
> C++ Design" or here
> http://osl.iu.edu/~tveldhui/papers/Template-Metaprograms/meta-art.html 
> .
> Since type system allows implementation of natural arithmetic, do you 
> know,
> is it Turing-complete?

I don't know whether it's Turing complete, but if you're more 
interested in how to (ab?)use type classes to perform computations, see 
a paper named "Fun with Functional Dependencies":

     http://www.cs.chalmers.se/~hallgren/Papers/wm01.html

That shows how you use multi-parameter type classes and functional 
dependencies to create full functions in the type system.  Once you 
understand that, you might be able to wrap your head around this 
example:

     http://www.haskell.org/hawiki/SimulatingDependentTypes

which shows how to create an AVL tree data type, with which it is 
impossible write a function that can unbalance the tree.

There is also a very interesting paper posted to the main Haskell 
mailing list only a few days ago:

     http://www.eecs.harvard.edu/~ccshan/prepose/

which shows (amongst other things) how to reify _any_ value to a type, 
i.e. create a new type which represents that (and only that) particular 
value in the type system, and how to "round-trip" that unique type back 
to the value it originally came from.  I'm not sure if you're 
interested in type wizardry, but it shows a very impressive amount of 
static computation that you can do with the type system at 
compile-time.

> The only issue is to get rid of AnyMyInterface around the code. Can you
> explain me why

Hmm, what's the higher goal of what you're trying to achieve?  I, like 
you, came from a background of object-oriented programming, and I've 
always managed to avoid making a list containing more than one type 
after re-thinking about the problem.  You can do it, sure, but the 
typical reasons for doing so in Haskell are very different from doing 
this in, say, Java.


-- 
% Andre Pang : trust.in.love.to.save



More information about the Haskell-Cafe mailing list