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/TreeE...
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