import "Prelude" // --- Signals ------------------------------------------------------ data Signal = SigSum [Signal] | SigConst Double | SigNeg Signal | SigMul [Signal] deriving instance Show Signal instance Additive Signal where zero = SigConst 0 a + b = SigSum [a,b] sum l = SigSum l instance Ring Signal where one = SigConst 1 neg a = SigNeg a fromInteger i = SigConst (fromInteger i) a * b = SigMul [a,b] /* instance Real Signal where fromDouble d = SigConst d */ main :: Signal main = 1 + 2 * 3 - 4 -- ???