hsc3-lang-0.11: Sound/SC3/Lang/Collection/Extension.hs
-- | Variants of standard numerical operators with SC3 extension
-- behaviour. Pointwise operations in SuperCollider language extend
-- the shorter input by cycling.
--
-- > [1,2] +. [3,4,5] == [1,2,1] +. [3,4,5]
-- > [1,2] +. [3,4,5] == [4,6,6]
--
-- The function underlying the list numerical instances is 'zipWith_c'.
--
-- > zipWith (+) [1,2] [3,4,5] == [4,6]
-- > zipWith_c (+) [1,2] [3,4,5] == [4,6,6]
module Sound.SC3.Lang.Collection.Extension where
import qualified Sound.SC3.Lang.Collection as C
-- | Class defining 'zipWith_c' which is a cycle extending variant of
-- 'zipWith'.
class Extending f where
zipWith_c :: (a -> b -> c) -> f a -> f b -> f c
instance Extending [] where
zipWith_c = C.zipWith_c
-- | 'zipWith_c' '+'.
(+.) :: (Extending f,Num a) => f a -> f a -> f a
(+.) = zipWith_c (+)
-- | 'zipWith_c' '*'.
(*.) :: (Extending f,Num a) => f a -> f a -> f a
(*.) = zipWith_c (*)
-- | 'zipWith_c' '/'.
(/.) :: (Extending f,Fractional a) => f a -> f a -> f a
(/.) = zipWith_c (/)
-- | 'zipWith_c' '-'.
(-.) :: (Extending f,Num a) => f a -> f a -> f a
(-.) = zipWith_c (-)