[Haskell-cafe] Parse text difficulty

David Menendez zednenem at psualum.com
Thu Dec 9 21:33:55 EST 2004


Tomasz Zielonka writes:

> On Thu, Dec 09, 2004 at 10:02:39AM -0500, Jan-Willem Maessen - Sun
> Labs East wrote:
> > 
> > And I thought that most programmers used "zipWith", which has to be
> > prefix.
> 
> You can also use zipWith to simulate zipN, for any N (however, the
> following code uses infix notation):

Here's my favorite method, which I picked up from a paper whose title I
have forgotten:

Prelude> let zipWithN = (.repeat)
Prelude> let succ d f x = d (zipWith ($) f x)
Prelude> let zero = id
Prelude> let one = succ zero
Prelude> let two = succ one

Prelude> :t zipWithN two
zipWithN two :: forall b b1 b2.
                (b -> b1 -> b2) -> [b] -> [b1] -> [b2]

Prelude> zipWithN two (,) [1..] (words "Haskell is great")
[(1,"Haskell"),(2,"is"),(3,"great")]

Prelude> let three = succ two
Prelude> :t zipWithN three
zipWithN three :: forall b b1 b2 b3.
                  (b -> b1 -> b2 -> b3) -> [b] -> [b1] -> [b2] -> [b3]

Prelude> :t zipWithN (succ three)
zipWithN (succ three) :: forall b b1 b2 b3 b4.
                         (b -> b1 -> b2 -> b3 -> b4) -> [b] -> [b1] ->
[b2] -> [b3] -> [b4]

Note that 
    zipWithN zero == repeat
and
    zipWithN one  == map
-- 
David Menendez <zednenem at psualum.com> | "In this house, we obey the laws
<http://www.eyrie.org/~zednenem>      |        of thermodynamics!"


More information about the Haskell-Cafe mailing list