[Haskell-cafe] Design question
haskell at kudling.de
haskell at kudling.de
Thu Dec 17 06:44:12 EST 2009
Hi all,
thanks for your ideas so far.
> I think you might be looking for too much sugar. I don't know much
> about your problem, but I would use approximately your approach and be
> straightforward:
To bother you with some details: i am building a model for an SVG document.
http://chlor.svn.sourceforge.net/viewvc/chlor/trunk/haskell/Chlor/FileFormat/Svg/SvgDocument.hs
There are many SVG elements, of which only a few are valid as the content of
each other SVG elements.
SvgDocumentElement defines the allowed subset for the SVG document.
I want to generate a "DList Char" for all those sub-elements and finally
collapse them to one "DList Char" representing the whole SVG document.
So it's a bit more complicated than your "Either" example
I need to manually efine such subset data structures for most SVG elements which
does not feel most elegant already.
Additionally instantiating a class for the subset structures, in order to being
able to iterate over them, feels even more clumsy.
So i wonder whether i am missing a more clean approach to the problem "easily
combining data structures but also easy iteration over them".
>
> type SubSet = Either A C
>
> > and use it in Foo:
> >
> > data Foo = Foo [SubSet]
> >
> > No i want to perform a polymorphic operation on the contents of A,B,C, e.g.
> >
> > doSomething :: Foo -> [Double]
> > doSomething (Foo s) = map doSomethingElse s
>
> doSomething (Foo s) = map (doSomethingWithA ||| doSomethingWithC) s
>
> (||| is from Control.Arrow)
>
> If that gets too complicated, you can build the "doSomething"
> functions in a type-directed way using typeclasses:
>
> class DoSomething a where
> doSomething :: a -> Double
>
> instance DoSomething A where ...
> instance DoSomething B where ...
> instance DoSomething C where ...
>
> instance (DoSomething a, DoSomething b) => DoSomething (Either a b) where
> doSomething = doSomething ||| doSomething
>
> Luke
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20091217/d8998c11/attachment.html
More information about the Haskell-Cafe
mailing list