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