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