{-# OPTIONS_GHC -threaded #-}
{-# LANGUAGE FlexibleInstances #-}
module DobutokO.Sound.One where
data One2 a = O21 a | O22 a a deriving Eq
one2C :: One2 a -> String
one2C (O21 _) = "O21"
one2C (O22 _ _) = "O22"
one21 :: One2 a -> [a]
one21 (O21 x) = [x]
one21 (O22 x y) = [x,y]
one2Set1 :: a -> One2 a -> One2 a
one2Set1 x (O21 _) = O21 x
one2Set1 x (O22 _ y) = O22 x y
one2Set2 :: a -> One2 a -> One2 a
one2Set2 y (O21 x) = O22 x y
one2Set2 y (O22 x _) = O22 x y
data One3 a = O31 a | O32 a a | O33 a a a deriving Eq
one3C :: One3 a -> String
one3C (O31 _) = "O31"
one3C (O32 _ _) = "O32"
one3C (O33 _ _ _) = "O33"
one31 :: One3 a -> [a]
one31 (O31 x) = [x]
one31 (O32 x y) = [x,y]
one31 (O33 x y z) = [x,y,z]
one3Set1 :: a -> One3 a -> One3 a
one3Set1 x (O31 _) = O31 x
one3Set1 x (O32 _ y) = O32 x y
one3Set1 x (O33 _ y z) = O33 x y z
one3Set2 :: a -> One3 a -> One3 a
one3Set2 y (O31 x) = O32 x y
one3Set2 y (O32 x _) = O32 x y
one3Set2 y (O33 x _ z) = O33 x y z
one3Set3 :: a -> One3 a -> Maybe (One3 a)
one3Set3 z (O32 x y) = Just (O33 x y z)
one3Set3 z (O33 x y _) = Just (O33 x y z)
one3Set3 _ _ = Nothing