В следующем коде Haskell, как это можно записать более лаконично? Нужно ли перечислять все четыре условия, или их можно суммировать с помощью более компактного шаблона? Например, есть ли способ, которым я могу воспользоваться Haskell, уже зная, как добавить float и int, без необходимости вручную указывать fromIntegral?Соответствующие типы данных в Haskell. Короткие сокращения?
data Signal = SignalInt Int | SignalFloat Float | Empty deriving (Show)
sigAdd :: Signal -> Signal -> Signal
sigAdd (SignalInt a) (SignalInt b) = SignalInt (a + b)
sigAdd (SignalInt a) (SignalFloat b) = SignalFloat ((fromIntegral a) + b)
sigAdd (SignalFloat a) (SignalInt b) = SignalFloat (a + (fromIntegral b))
sigAdd (SignalFloat a) (SignalFloat b) = SignalFloat (a + b)
main :: IO()
main = do
putStrLn (show (sigAdd (SignalFloat 2) (SignalInt 5)))
> sigAdd са С.Б. = SignalFloat (toFloatSig а + toFloatSig б) Если это будет "... (toFloatSig са + toFloatSig С.Б.)"? Благодарю. – Steve
Вы правы, спасибо. – Thomas
Я бы определенно попытался заставить Signal Num работать. –