Haskell: предложение where, ссылающееся на связанные переменные в lambda

Я пытаюсь численно интегрировать функцию в Haskell, используя правило трапеций, возвращая антипроизводную, которая принимает аргументы a, b для конечных точек интервала, который нужно интегрировать.

integrate :: (Float -> Float) -> (Float -> Float -> Float)

integrate f
  = \ a b -> d * sum [ f (a + d*k) | k <- [0..n] ] - d/2.0 * (f a + f b)
    where
      d = (b - a) / n
      n = 1000

Выше я использовал

n - for the number of subintervals
d - for the width of each subinterval

Это почти работает, за исключением связанных аргументов a, b в лямбде. Я получаю сообщение об ошибке:

Not in scope: `b'
Not in scope: `a'

Я понимаю, что область действия a, b ограничена только этим лямбда-выражением, но есть ли обходной путь в Haskell, чтобы мне не приходилось писать (ba) / n для каждого вхождения d в приведенном выше?

13
задан Bylextor 24 January 2012 в 10:20
поделиться