[Haskell-cafe] Looking for feedback on my attempt at a tree construction edsl

Edward Kmett ekmett at gmail.com
Tue Mar 22 20:20:25 CET 2011


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 <limestrael at gmail.com> wrote:

> 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 at 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/TreeEdsl.hs
>>
>> I'd appreciate your feedback on this. Does this qualify to be a edsl?
>>
>> Regards,
>> Kashyap
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20110322/b191d0a0/attachment.htm>


More information about the Haskell-Cafe mailing list