haskore-supercollider-0.0.2: src/Haskore/Interface/SuperCollider/Channel/Env.hs
{- |
An instance of 'Haskore.Interface.SuperCollider.Channel.T'
using environment variables.
Since we need writing of variables,
we need "System.Posix.Env" module
rather than the generic "System.Environment".
-}
module Haskore.Interface.SuperCollider.Channel.Env where
import qualified Haskore.Interface.SuperCollider.Channel as ChannelMng
import Haskore.Interface.SuperCollider.Channel
(Channel, NumberChannels)
import System.Posix.Env (setEnv, getEnv)
import Data.Char (isDigit)
manager :: ChannelMng.T IO
manager = ChannelMng.Cons next reset
next :: NumberChannels -> IO Channel
next inc =
do maybeNumStr <- getEnv envName
let num =
maybe ChannelMng.least
(\numStr ->
if all isDigit numStr
then read numStr
else ChannelMng.least)
maybeNumStr
setEnv envName (show (inc+num)) True
return num
reset :: IO ()
reset = setEnv envName (show ChannelMng.least) True
envName :: String
envName = "HaskoreSC3Channel"