Я использую объятия для компиляции простой функции 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
Вероятно, что-то очевидно, что мне не хватает, но я занимался этим довольно давно и не могу придумать решение.