4
在下面的Haskell代碼中,這怎麼寫得更簡潔?是否有必要列出所有四個條件,或者可以通過更緊湊的模式來總結這些條件?例如,有沒有辦法我可以利用Haskell已經知道如何添加一個float和一個int,而不必手動指定從?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 SA SB = SignalFloat(toFloatSig A + toFloatSig B) 如果這是 「...(toFloatSig SA + SB toFloatSig)」?謝謝。 – Steve 2009-11-11 18:46:31
你說得對,謝謝。 – Thomas 2009-11-11 18:53:57
我一定會讓Signal Num工作。 – 2009-11-11 21:17:23