[Haskell-cafe] Ideas of a polymorphic Tree in Haskell

Edgar Z. Alvarenga edgar at ymonad.com
Thu May 13 09:06:50 EDT 2010


Hi,

I created a small Genetic Algorithm program, replicating this 
work ("Statistical mechanics of program systems" - JP Neirotti, N.
Caticha, Journal of Physics A  Math and Gen) made in Lisp. When a
restricted the problem just for one type, the Haskell program worked
perfectly with much less lines and a lot faster than the Lisp program.
The problem was when I tried to generalize to polymorphic types. 

I'm using this datatype to represent a program:

data Tree a = Bin (String, (a -> a -> a)) (Tree a) (Tree a)
            | Un (String, (a -> a)) (Tree a)
            | V

And can convert a Tree to a function with:

treeToFunc :: Tree a -> a -> a
treeToFunc (Bin f l r) =  (snd f) <$> treeToFunc l <*> treeToFunc r
treeToFunc (Un f u) = (snd f).(treeToFunc u)
treeToFunc V = id

I already create another datatype to represent a polymorphic program
(using GADT or existentials), but doesn't see a way to convert this kind
of tree to a function. 

Anyone has any idea?

Thanks,
Edgar


More information about the Haskell-Cafe mailing list