packages feed

hmeap-0.7: Help/browse.hs

import Control.Monad
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 :: M.MEAP -> IO ()
browse m = do
  putStr "feature> "
  i <- fmap (readDef 0) getLine
  putStr "frame> "
  j <- fmap (readDef 0) getLine
  let f = M.features m !! i
      l = M.feature_column f
      r = l + M.feature_degree f - 1
  putStrLn (show ( "feature", f))
  putStrLn (show ("chunk", map (\c -> M.position m (j, c)) [l..r]))

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