module Sound.Tidal.StreamTypes where

import qualified Data.Map.Strict as Map
import Sound.Tidal.Pattern
import Sound.Tidal.Show ()

data PlayState = PlayState {PlayState -> ControlPattern
pattern :: ControlPattern,
                            PlayState -> Bool
mute :: Bool,
                            PlayState -> Bool
solo :: Bool,
                            PlayState -> [ControlPattern]
history :: [ControlPattern]
                           }
               deriving Int -> PlayState -> ShowS
[PlayState] -> ShowS
PlayState -> String
(Int -> PlayState -> ShowS)
-> (PlayState -> String)
-> ([PlayState] -> ShowS)
-> Show PlayState
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PlayState -> ShowS
showsPrec :: Int -> PlayState -> ShowS
$cshow :: PlayState -> String
show :: PlayState -> String
$cshowList :: [PlayState] -> ShowS
showList :: [PlayState] -> ShowS
Show

type PatId = String
type PlayMap = Map.Map PatId PlayState

data TickState = TickState {
                    TickState -> Arc
tickArc   :: Arc,
                    TickState -> Double
tickNudge :: Double
                   }
  deriving Int -> TickState -> ShowS
[TickState] -> ShowS
TickState -> String
(Int -> TickState -> ShowS)
-> (TickState -> String)
-> ([TickState] -> ShowS)
-> Show TickState
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TickState -> ShowS
showsPrec :: Int -> TickState -> ShowS
$cshow :: TickState -> String
show :: TickState -> String
$cshowList :: [TickState] -> ShowS
showList :: [TickState] -> ShowS
Show

patternTimeID :: String
patternTimeID :: String
patternTimeID = String
"_t_pattern"