У меня есть следующие требования: дано рациональное число (x% y):
- Если y! = 1 => вернуть «xy»
- В противном случае: вернуть «x» "
Работает следующая функция:
import Data.Ratio
my_show :: (Integral a, Show a) => (Ratio a) -> String
my_show rat = let x = numerator rat
y = denominator rat in
if y /= 1 then (show x) ++ " " ++ (show y) else show x
Можно ли сделать ее более элегантной? Например, я видел в источниках Data.Ratio, что он использует некоторые обозначения для входов функций: (x:%y)
, но у меня это не сработало. Поэтому я должен использовать let
и явно вызывать numerator
и denominator
.