packages feed

hmeap-0.6: Help/browse.hs

import Control.Monad
import qualified Data.IntMap as Map
import qualified Sound.Analysis.Meapsoft as M
import System.Environment
import System.IO

readMaybe :: Read a => String -> Maybe a
readMaybe s = case reads s of
                [(x, "")] -> Just x
                _         -> Nothing

readDef :: (Read a) => a -> String -> a
readDef x s = maybe x id (readMaybe s)

browse :: Map.IntMap M.Frame -> IO ()
browse f = do putStr "feature> "
              n <- fmap (readDef 0) getLine
              putStr "chunk> "
              m <- fmap (readDef 0) getLine
              putStrLn (show ( "feature", n, M.features !! n
                             , "chunk", m ))
              let (_, _, d) = M.raw_data (f Map.! m)
              putStrLn (show (d !! n))

main :: IO ()
main = do hSetBuffering stdout NoBuffering
          a <- getArgs
          unless (length a == 1) (error "feature-file")
          let [f] = a
          fs <- M.read_file f
          putStrLn (show ("nframes", length fs, "nfeatures", length M.features))
          let m = Map.fromList (zip [0..] fs)
          forever (browse m)