[Haskell-cafe] Re: Functions that return functions

Achim Schneider barsoap at web.de
Sun Apr 12 12:01:30 EDT 2009

michael rice <nowgate at yahoo.com> wrote:

> makeVerifier :: (Int -> Int ->__ Int) -> Int -> (Int -> Bool)
> makeVerifier f m = \n -> let d = digits n
> ________________________________________________________ i = [1..(length d)]
> ________________________________________________ in \n -> divides m (foldl (+) 0 (map2 f i d))

makeVerifier :: (Int -> Int ->__ Int) -> Int -> Int -> Bool
makeVerifier f m n = divides m $ foldl (+) 0 $ map2 f i d
    d = digits n
    i = [1..length d]

...looks way more like Haskell[1] to me, and is equivalent (modulo
actually trying it out, and the strange fact that the second n is

From a scheme perspective, all Haskell functions only take one argument
and are made into multiple-arg functions by stacking lambdas, hidden by
syntactic sugar. The usual (define (foo a b) ...) would be written 
"foo (a,b) = ..." in Haskell. In other words, functions are curried by

You might also want to use foldr or foldl' instead of foldl, there's
some differences in behaviour between scheme and Haskell due to
laziness: See http://www.haskell.org/haskellwiki/Fold as well as the
referenced wiki page.

Hope that helps.

[1] There's some decent potential for point-free style there, but I
    don't feel like doing that right now

(c) this sig last receiving data processing entity. Inspect headers
for copyright history. All rights reserved. Copying, hiring, renting,
performance and/or quoting of this signature prohibited.

More information about the Haskell-Cafe mailing list