type Series a = Int -> [a] (\/) :: Series a -> Series a -> Series a s1 \/ s2 = \ d -> s1 d ++ s2 d (><) :: Series a -> Series b -> Series (a,b) s1 >< s2 = \ d -> do x1 <- s1 d; x2 <- s2 d; return (x1, x2) cons0 :: a -> Series a cons1 :: Serial a => (a -> b) -> Series b cons2 :: ( Serial a, Serial b) => (a -> b -> c) -> Series c