【发布时间】:2009-11-12 02:54:06
【问题描述】:
在下面的 Haskell 代码中,如何写得更简洁?是否有必要列出所有四个条件,或者可以用更紧凑的模式来概括这些条件?例如,有没有一种方法可以利用 Haskell 已经知道如何添加 float 和 int,而无需手动指定 fromIntegral?
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)))
【问题讨论】:
标签: haskell types pattern-matching