[Haskell-cafe] Re: The Worker/Wrapper Transformation
Jonathan Cast
jonathanccast at fastmail.fm
Thu Jan 3 11:18:17 EST 2008
On 3 Jan 2008, at 4:49 AM, Isaac Dupree wrote:
> Achim Schneider wrote:
>> Achim Schneider <barsoap at web.de> wrote:
>>> [...]
>> I'm trying to grok that
>> [] = id
>> ++ = .
>> in the context of Hughes lists.
>
> they are also known as "difference lists", and also used at type
> String in the Prelude as "ShowS", to help avoid quadratic behavior
> when making complicated Strings. the [a]->[a] is not an ordinary
> function -- it's expected not to examine its argument, just to use
> it exactly once (is there a formal way to say that?)
f xn = f [] ++ xn
is the first thing off the top of my head.
OTOH, examining your argument (while, strictly speaking unsafe) is
pretty darn cool:
f [] = "foo"
f (c:s) | isAlphaNum c = "foo "++c:s
| otherwise = "foo"++c:s
Token prepend.
jcc
More information about the Haskell-Cafe
mailing list