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

Reply via email to