{- |
demonstrate mutable tables
-}
module Example.UpdateMonad where

import Company
import Query (showTable, )
import qualified Query
import qualified Table

import Control.Monad (guard, )


main :: IO ()
main = do
   empTable <- Table.create emp
   deptTable <- Table.create dept

   Table.insert empTable
      (Emp
         (EmpNo 7974)
         "LEHMAN"
         Clerk
         (Just (EmpNo 7788))
         1020
         (DeptNo 20))

   emp0 <- Table.from empTable
   showTable (do
      e <- emp0
      guard (job e == Clerk)
      return e)

   Table.delete empTable
      (\e -> ename e == "WARD")

   Table.update empTable
      (\e -> e{sal = sal e + 100})

   emp1 <- Table.from empTable
   dept0 <- Table.from deptTable
   showTable (do
      (dm,es) <- Query.groupBy deptno emp1
      d <- dept0
      guard (deptno d == dm)
      return (dname d, Query.averageInt (map sal es)))