-- File: src/functional/haskell/ListTest.hs
-- Corresponds to ListTest2.java
-- Copyright (C) 2010 Gregory D. Weber
-- Revised 2013 Nov 4

module Main where

import System.IO (hFlush, stdout)
import TreeSet

main :: IO ()
main = do
  let set = newTreeSet :: TreeSet String
      line = " "
  putStrLn (show set)
  loop line set

loop :: String -> TreeSet String -> IO ()
loop line set = 
    if line == "q"
    then return ()
    else do
      set' <- if length line == 0
              then do                
                putStrLn "Type h for help"
                return set
              else do
                let cmd = head line
                    value = tail line
                case cmd of
                  'e' -> do
                    print (member value set) 
                    return set
                  'i' -> return (insert value set)
                  'r' -> return (remove value set)
                  'q' -> return set
                  'h' -> do
                    help
                    return set
                  _ -> do
                    putStrLn "Type h for help"
                    return set
      putStrLn (show set')
      putStr "? "
      hFlush stdout
      line' <- getLine
      loop line' set'
                    
help :: IO ()
help = do
  putStrLn "Usage: runghc TreeSetTest [arg ...]"
  putStrLn "Commands:"
  putStrLn "e<value> to tell whether <value> is in the set"
  putStrLn "i<value> to insert <value>"
  putStrLn "r<value> to remove <value>"
  putStrLn "h to print this help message"
  putStrLn "q to quit"

