You could turn 'insertSubTree' into and operator, and shorten "insertLeaf"

createTree = do
    "Fruits" +> do
                leaf "Apple"
                leaf "Mango
    "Arbitrary" +> do
                   leaf "1"
    -- and so on...

It's a little bit more concise.
But I fail to see the use of TreeContext being an instance of Monad.

2011/3/22 C K Kashyap <ckkashyap@gmail.com>
Hi,
With my "edsl", one can describe a tree like this -

import TreeEdsl
import Data.Tree

createTree :: TreeContext String ()
createTree = do
insertSubTree "Fruits" $ do
insertLeaf "Apple"
insertLeaf "Mango"
insertSubTree "Arbitrary" $ do
insertSubTree "Numbers" $ do
insertLeaf "1"
insertLeaf "2"
insertLeaf "3"
insertSubTree "Letters" $ do
insertLeaf "A"
insertLeaf "B"
insertLeaf "C"
return ()
main = do
tree <- process "root" createTree
putStrLn (drawTree (fmap show tree))
return ()


and get a tree like this - 

"root"
|
+- "Arbitrary"
|  |
|  +- "Letters"
|  |  |
|  |  +- "C"
|  |  |
|  |  +- "B"
|  |  |
|  |  `- "A"
|  |
|  `- "Numbers"
|     |
|     +- "3"
|     |
|     +- "2"
|     |
|     `- "1"
|
`- "Fruits"
   |
   +- "Mango"
   |
   `- "Apple"

 
My code is here 
https://github.com/ckkashyap/LearningPrograms/blob/master/Haskell/edsl/TreeEdsl.hs

I'd appreciate your feedback on this. Does this qualify to be a edsl?

Regards,
Kashyap

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe