module UHC.Light.Compiler.CoreRun.Prim
( RunPrim (..)
, showRunPrim
, allRunPrimMp )
where
import qualified Data.Map as Map

{-# LINE 21 "src/ehc/CoreRun/Prim.chs" #-}
-- | Primitives.
-- Assumption: name of primitive starts with 3 choosable char + exact name of prim
data RunPrim
  =
    -- Int arithmetic
    RP_primAddInt
  | RP_primSubInt
  | RP_primMulInt
  | RP_primDivInt
  | RP_primEqInt
  | RP_primLeInt
  | RP_primNeInt

    -- UHC.IOBase: Exception handling
  | RP_primCatchException

    -- UHC.MutVar
  | RP_primNewMutVar
  | RP_primReadMutVar
  | RP_primWriteMutVar
  | RP_primSameMutVar

    -- UHC.Base
  | RP_primPackedStringToInteger
  | RP_primPackedStringNull -- :: PackedString -> Bool
  | RP_primPackedStringHead -- :: PackedString -> Char
  | RP_primPackedStringTail -- :: PackedString -> PackedString
  | RP_primShowInteger

    -- UHC.Base: Bounded
  | RP_primMaxInt
  | RP_primMinInt

    -- UHC.Prims: conversion
  | RP_primIntegerToInt32
  | RP_primIntToInteger
  | RP_primIntegerToInt

    -- System.IO
    --- * The IO monad

  -- IO                        -- instance MonadFix
  | RP_fixIO                     -- :: (a -> IO a) -> IO a

    --- * Files and handles

  -- FilePath                  -- :: String

  -- Handle             -- abstract, instance of: Eq, Show.

    --- ** Standard handles

    -- | Three handles are allocated during program initialisation,
    -- and are initially open.

  | RP_stdin
  | RP_stdout
  | RP_stderr   -- :: Handle

    --- * Opening and closing files

    --- ** Opening files

  | RP_withFile
  | RP_openFile                  -- :: FilePath -> IOMode -> IO Handle
  -- IOMode(ReadMode,WriteMode,AppendMode,ReadWriteMode),

    --- ** Closing files

  | RP_hClose                    -- :: Handle -> IO ()

    --- ** Special cases

    -- | These functions are also exported by the "Prelude".

  | RP_readFile                  -- :: FilePath -> IO String
  | RP_writeFile                 -- :: FilePath -> String -> IO ()
  | RP_appendFile                -- :: FilePath -> String -> IO ()

    --- ** File locking

    --- $locking

    --- * Operations on handles

    --- ** Determining and changing the size of a file

  | RP_hFileSize                 -- :: Handle -> IO Integer
--- #ifdef __GLASGOW_HASKELL__
  | RP_hSetFileSize              -- :: Handle -> Integer -> IO ()
--- #endif

     --- ** Detecting the end of input

  | RP_hIsEOF                    -- :: Handle -> IO Bool
  | RP_isEOF                     -- :: IO Bool

    --- ** Buffering operations

  -- BufferMode(NoBuffering,LineBuffering,BlockBuffering),
  | RP_hSetBuffering             -- :: Handle -> BufferMode -> IO ()
  | RP_hGetBuffering             -- :: Handle -> IO BufferMode
  | RP_hFlush                    -- :: Handle -> IO ()

    --- ** Repositioning handles

  | RP_hGetPosn                  -- :: Handle -> IO HandlePosn
  | RP_hSetPosn                  -- :: HandlePosn -> IO ()
  -- HandlePosn,                -- abstract, instance of: Eq, Show.

  | RP_hSeek                     -- :: Handle -> SeekMode -> Integer -> IO ()
  -- SeekMode(AbsoluteSeek,RelativeSeek,SeekFromEnd),
--- #if !defined(__NHC__)
  | RP_hTell                     -- :: Handle -> IO Integer
--- #endif

    --- ** Handle properties

  | RP_hIsOpen
  | RP_hIsClosed        -- :: Handle -> IO Bool
  | RP_hIsReadable
  | RP_hIsWritable  -- :: Handle -> IO Bool
  | RP_hIsSeekable               -- :: Handle -> IO Bool

    --- ** Terminal operations (not portable: GHC\/Hugs only)

--- #if !defined(__NHC__)
  | RP_hIsTerminalDevice          -- :: Handle -> IO Bool

  | RP_hSetEcho                   -- :: Handle -> Bool -> IO ()
  | RP_hGetEcho                   -- :: Handle -> IO Bool
--- #endif

    --- ** Showing handle state (not portable: GHC only)

--- #ifdef __GLASGOW_HASKELL__
  | RP_hShow                      -- :: Handle -> IO String
--- #endif

    --- * Text input and output

    --- ** Text input
  | RP_hWaitForInput             -- :: Handle -> Int -> IO Bool
  | RP_hReady                    -- :: Handle -> IO Bool
  | RP_hGetChar                  -- :: Handle -> IO Char
  | RP_hGetLine                  -- :: Handle -> IO [Char]
  | RP_hLookAhead                -- :: Handle -> IO Char
  | RP_hGetContents              -- :: Handle -> IO [Char]
    --- ** Text output

  | RP_hPutChar                  -- :: Handle -> Char -> IO ()
  | RP_hPutStr                   -- :: Handle -> [Char] -> IO ()
  | RP_hPutStrLn                 -- :: Handle -> [Char] -> IO ()
  | RP_hPrint                    -- :: Show a => Handle -> a -> IO ()

    --- ** Special cases for standard input and output

    -- | These functions are also exported by the "Prelude".

  | RP_interact                  -- :: (String -> String) -> IO ()
  -- putChar                   -- :: Char   -> IO ()
  -- putStr                    -- :: String -> IO ()
  -- putStrLn                  -- :: String -> IO ()
  -- print                     -- :: Show a => a -> IO ()
  -- getChar                   -- :: IO Char
  -- getLine                   -- :: IO String
  -- getContents               -- :: IO String
  | RP_readIO                    -- :: Read a => String -> IO a
  | RP_readLn                    -- :: Read a => IO a

    --- * Binary input and output
  | RP_withBinaryFile
  | RP_openBinaryFile            -- :: FilePath -> IOMode -> IO Handle
  | RP_hSetBinaryMode            -- :: Handle -> Bool -> IO ()
  | RP_hPutBuf                   -- :: Handle -> Ptr a -> Int -> IO ()
  | RP_hGetBuf                   -- :: Handle -> Ptr a -> Int -> IO Int
--- #if !defined(__NHC__) && !defined(__HUGS__)
  | RP_hPutBufNonBlocking        -- :: Handle -> Ptr a -> Int -> IO Int
  | RP_hGetBufNonBlocking        -- :: Handle -> Ptr a -> Int -> IO Int
--- #endif
    --- * Temporary files

  | RP_openTempFile
  | RP_openBinaryTempFile

    --- * Additional ones
  | RP_primShowHandle 				-- :: Handle -> String
  | RP_primEqHandle 				-- :: Handle -> Handle -> Bool

  deriving (Show, Eq, Ord, Enum, Bounded)

{-# LINE 214 "src/ehc/CoreRun/Prim.chs" #-}
-- | Show prim without initial 3 chars
showRunPrim :: RunPrim -> String
showRunPrim p = drop 3 $ show p

{-# LINE 220 "src/ehc/CoreRun/Prim.chs" #-}
allRunPrimMp :: Map.Map String RunPrim
allRunPrimMp = Map.fromList [ (showRunPrim p, p) | p <- [ minBound .. maxBound ] ]