[Haskell-cafe] Reducing code for efficient ShowS
wren ng thornton
wren at freegeek.org
Fri Sep 5 18:47:07 EDT 2008
Sean Leather wrote:
>> Why not use the dlist library:
>>
>> http://hackage.haskell.org/cgi-bin/hackage-scripts/package/dlist
>>
>> With something like (untested code):
>>
>> > xs +++ ys = shows xs `append` shows ys
>> > x .++ ys = showChar x `cons` shows ys
>> > xs ++. y = shows xs `snoc` showChar y
>> >
>> > ext3' = toList $ '(' .++ n +++ ' ' .++ s ++. ')'
>>
>
> I think you're missing the fromList parts among other things.
Ah yes, dlist uses a newtype instead of an alias so `shows` isn't enough.
There's also the question of where exactly to hide the (Show a => a ->
DList Char) conversions if you want to be more succinct than the (++)
route.
> That's an interesting idea. It appears to use the same idea as ShowS, but
> more generally with lists and not just strings.
The difference-list approach to solving the appending problem is classic.
There's a variant for unification-based logic languages as well. Both are
functional takes on the imperative approach of keeping a tail pointer.
Dons just took the time to package it up for us all :)
> I think there's an added benefit to not having to remember the the type of
> the value being appended. It's one of the more convenient things about many
> dynamically typed languages. So, I would still vote for the class-based
> method, so that I can use (.+.) for both Char and everything else.
Sure.
If you're planning on releasing the code, I'd suggest a different spelling
of (.+.) though. The (.X.) pattern for a family of operators is pretty
common, so it's good to avoid it for modules that want to be used in
combination with many others. YMMV and all that.
--
Live well,
~wren
More information about the Haskell-Cafe
mailing list