[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