-- |
-- Module      :  DobutokO.Sound.Effects.Channels
-- Copyright   :  (c) OleksandrZhabenko 2020
-- License     :  MIT
-- Stability   :  Experimental
-- Maintainer  :  olexandr543@yahoo.com
--
-- Helps to create experimental music. 
-- Can be used for applying the \"channels\" SoX effect. 
-- 

{-# OPTIONS_GHC -threaded #-}
{-# LANGUAGE FlexibleInstances #-}

module DobutokO.Sound.Effects.Channels where

data Chans a = Chans a deriving Chans a -> Chans a -> Bool
(Chans a -> Chans a -> Bool)
-> (Chans a -> Chans a -> Bool) -> Eq (Chans a)
forall a. Eq a => Chans a -> Chans a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Chans a -> Chans a -> Bool
$c/= :: forall a. Eq a => Chans a -> Chans a -> Bool
== :: Chans a -> Chans a -> Bool
$c== :: forall a. Eq a => Chans a -> Chans a -> Bool
Eq

instance Show (Chans Int) where
  show :: Chans Int -> String
show (Chans Int
n) 
    | Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare Int
n Int
0 Ordering -> Ordering -> Bool
forall a. Eq a => a -> a -> Bool
== Ordering
GT = String
"channels " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
n
    | Bool
otherwise = String
""

type ChansI = Chans Int

channels1 :: Chans a -> a
channels1 :: Chans a -> a
channels1 (Chans a
x) = a
x

channelsSet1 :: a -> Chans a
channelsSet1 :: a -> Chans a
channelsSet1 = a -> Chans a
forall a. a -> Chans a
Chans 

showChnQ :: ChansI -> [String]
showChnQ :: Chans Int -> [String]
showChnQ = String -> [String]
words (String -> [String])
-> (Chans Int -> String) -> Chans Int -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Chans Int -> String
forall a. Show a => a -> String
show