
If you add an instance of IsString to handle leaf construction you can get
it down to
"Fruits" +> do
"Apple"
"Mango"
"Arbitrary" +> do
"1"
"..."
But I also don't see the point of doing this in a monad.
-Edward
On Tue, Mar 22, 2011 at 1:15 PM, Yves Parès
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
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
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe