Введите ошибку Haskell, что случилось?

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

Это функция:

choose :: Float -> Float -> Integer
 choose n r = truncate (chooseF (n r))
    where
        chooseF::Float->Float->Float
        chooseF n r | n==r = 1
                        | otherwise =  n / (n-r) * chooseF(n-1) r

Это ошибка (строка 35 - вторая строка функции):

ERROR "/homes/mb4110/SimpleMath":35 - Type error in application
*** Expression     : n r
*** Term           : n
*** Type           : Float
*** Does not match : a -> b

Вероятно, что-то очевидно, что мне не хватает, но я занимался этим довольно давно и не могу придумать решение.

0
задан Maciek 6 October 2011 в 14:47
поделиться