module Hat.IOBuiltin where import qualified System.IO as IO import System.IO(Handle,HandlePosn) import qualified Prelude import Hat.Hat as T import Hat.PreludeBuiltinTypes import Hat.Prelude import Hat.IOBuiltinTypes toHandle :: RefExp -> R Handle -> IO.Handle toHandle h (R e _) = e fromHandle :: RefExp -> IO.Handle -> R Handle fromHandle h e = R e (T.mkValueUse h mkNoSrcPos aHandle) aHandle :: RefAtom aHandle = mkAbstract "Handle" toHandlePosn :: RefExp -> R HandlePosn -> IO.HandlePosn toHandlePosn h (R e _) = e fromHandlePosn :: RefExp -> IO.HandlePosn -> R HandlePosn fromHandlePosn h p = R p (T.mkValueUse h mkNoSrcPos aHandlePosn) aHandlePosn :: RefAtom aHandlePosn = mkAbstract "HandlePosn" fromMaybe :: (RefExp -> a -> R b) -> RefExp -> Prelude.Maybe a -> R (Maybe b) fromMaybe f h Prelude.Nothing = T.con0 mkNoSrcPos h Nothing aNothing fromMaybe f h (Prelude.Just arg) = T.con1 mkNoSrcPos h Just aJust (T.wrapForward h (f h arg)) toMaybe :: (RefExp -> R a -> b) -> RefExp -> R (Maybe a) -> Prelude.Maybe b toMaybe f h (R Nothing _) = Prelude.Nothing toMaybe f h (R (Just x) _) = Prelude.Just (f h x) toIOMode :: RefExp -> R IOMode -> IO.IOMode toIOMode h (R ReadMode _) = IO.ReadMode toIOMode h (R WriteMode _) = IO.WriteMode toIOMode h (R AppendMode _) = IO.AppendMode toIOMode h (R ReadWriteMode _) = IO.ReadWriteMode toBufferMode :: RefExp -> R BufferMode -> IO.BufferMode toBufferMode h (R (BlockBuffering maybeInt) _) = IO.BlockBuffering (toMaybe toInt h maybeInt) toBufferMode h (R NoBuffering _) = IO.NoBuffering toBufferMode h (R LineBuffering _) = IO.LineBuffering fromBufferMode :: RefExp -> IO.BufferMode -> R BufferMode fromBufferMode h (IO.BlockBuffering maybeInt) = T.con1 mkNoSrcPos h BlockBuffering aBlockBuffering (T.wrapForward h (fromMaybe fromInt h maybeInt)) fromBufferMode h IO.NoBuffering = T.con0 mkNoSrcPos h NoBuffering aNoBuffering fromBufferMode h IO.LineBuffering = T.con0 mkNoSrcPos h LineBuffering aLineBuffering toSeekMode :: RefExp -> R SeekMode -> IO.SeekMode toSeekMode h (R AbsoluteSeek _) = IO.AbsoluteSeek toSeekMode h (R RelativeSeek _) = IO.RelativeSeek toSeekMode h (R SeekFromEnd _) = IO.SeekFromEnd