import qualified Sound.ALSA.Sequencer.Client.Info as ClientInfo import qualified Sound.ALSA.Sequencer as SndSeq import Control.Monad (when, ) main :: IO () main = SndSeq.with SndSeq.defaultName SndSeq.Block $ \h -> do i <- ClientInfo.queryFirst (h :: SndSeq.T SndSeq.OutputMode) let loop = do putStrLn =<< ClientInfo.getName i more <- ClientInfo.queryNext h i when more loop loop