
Hello all, I have a very interesting alternative solution of the problem. First I generate a tree with all the permutations: eg if I want to find al permutations of ao, I get the following tree [a @] | | [o 0] [o 0] Then I walk trough the tree so I can print it. There is only one ugly thing. Showtree' returns a string (in our example aoa0@o@0). To make it a list i put a \n between a left and right node and then use lines to make it a list of strings. Can someone point me in the right direction how to beautify it a bit? I also have an annoying problem with gmail and firefox. It seems it doesn add my posts to the current thread, but starts a new one. Oh well think I switch to evolution. I will review all yours solutions tomorrow. I saw some very beautifull things. With kind regards, Edgar Klerks module Main where import Data.Char data WordTree = Chain (Char,WordTree) | Choice (Char, WordTree) (Char, WordTree) | Stop instance Show WordTree where show = unlines.showTree type Rule = (Char, Char) type Rules = [Rule] infixl 4 ==> a ==> b = (a,b) rules :: Rules rules = [ 'a' ==> '@', 'l' ==> '|'] buildTree :: String -> Rules -> WordTree buildTree [] r = Stop buildTree (c:cs) r = case lookup c r of Just a -> Choice (a, buildTree cs r) (c, buildTree cs r) Nothing -> Chain (c, buildTree cs r) showTree a = lines $ showTree' a [] showTree' (Chain (a,b)) p = a : showTree' b p showTree' (Choice (a,b) (c,d)) p = c : showTree' d p ++ "\n" ++ (a : showTree' b p) showTree' (Stop) p = p