Я кое-что немного смутил, и я не уверен, как я могу больше узнать об этом. Скажем, у меня есть следующая программа:
main :: IO ()
main = do
x <- liftM read getLine
y <- liftM read getLine
print (x % y)
Если я запустил это с помощью ввода 6
и 2
, он напечатает 3 % 1
.
В какой момент происходит упрощение (а именно деление на gcd)? Он реализован в show
? Если это так, то это основное представление рационального еще 6 % 2
? Если нет, то делает ли (%)
упрощение? У меня создалось впечатление, что (%)
является конструктором данных, поэтому как конструктор данных может сделать что-то большее, чем "построить"? Что еще более важно, как я мог бы делать подобные вещи с моими собственными конструкторами данных?
Я ценю любую помощь по этой теме.