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 <[email protected]>
> 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
> [email protected]
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe