Dans le code Haskell suivant, comment cela peut-il être écrit plus succinctement? Est-il nécessaire d'énumérer les quatre conditions, ou peut-on les résumer par un modèle plus compact? Par exemple, existe-t-il un moyen de tirer parti de Haskell sachant déjà comment ajouter un float et un int, sans avoir à spécifier manuellement fromIntegral?Types de données de correspondance de modèle dans Haskell. Des raccourcis?
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 + b toFloatSig) devrait-il être "... (+ toFloatSig sa toFloatSig sb)"? Merci. – Steve
Vous avez raison, merci. – Thomas
Je chercherais certainement à faire fonctionner le Num Num. –