import GHC.Num (Integer, fromInteger, (+))
import GHC.Real ( rem, Ratio )
import GHC.IORef (IORef,newIORef)
import GHC.Num (Integer, fromInteger, (+))
import GHC.Real ( rem, Ratio )
import GHC.IORef (IORef,newIORef)
-- These imports are so we can define Typeable instances
-- It'd be better to give Typeable instances in the modules themselves
-- These imports are so we can define Typeable instances
-- It'd be better to give Typeable instances in the modules themselves