Builtin

-- | This module provides type info for use by the Programatica front-end.
-- The functions are defined in the OH run-time system and the OH compiler has
-- builtin strictness information to be able to generate efficient code.
module Builtin where

foreign import chr :: Int -> Char
foreign import ord :: Char -> Int
foreign import eqInt :: Int -> Int -> Bool
foreign import lteInt :: Int -> Int -> Bool
foreign import eqChar :: Char -> Char -> Bool
foreign import lteChar :: Char -> Char -> Bool
foreign import (+) :: Int -> Int -> Int
foreign import (-) :: Int -> Int -> Int
foreign import (*) :: Int -> Int -> Int
foreign import rem :: Int -> Int -> Int
foreign import quot :: Int -> Int -> Int
foreign import negate :: Int -> Int
foreign import signumInt :: Int -> Int

foreign import orInt :: Int -> Int -> Int
foreign import andInt :: Int -> Int -> Int
foreign import xorInt :: Int -> Int -> Int
foreign import shiftLInt :: Int -> Int -> Int
foreign import shiftRInt :: Int -> Int -> Int -- arithmetic shift right
foreign import shiftRWord :: Int -> Int -> Int -- logical shift right

foreign import minInt :: Int
foreign import maxInt :: Int
foreign import maxWord32 :: Int
foreign import bitSizeInt :: Int

foreign import eqFloat :: Double -> Double -> Bool
foreign import lteFloat :: Double -> Double -> Bool
foreign import plusFloat :: Double -> Double -> Double
foreign import minusFloat :: Double -> Double -> Double
foreign import mulFloat :: Double -> Double -> Double
foreign import divFloat :: Double -> Double -> Double
foreign import signumFloat :: Double -> Double
foreign import negateFloat :: Double -> Double
foreign import truncFloat :: Double -> Double
foreign import roundFloat :: Double -> Double
foreign import floorFloat :: Double -> Double
foreign import ceilFloat :: Double -> Double
foreign import expFloat  :: Double -> Double
foreign import exp2Float :: Double -> Double
foreign import logFloat  :: Double -> Double
foreign import log2Float :: Double -> Double
foreign import sinFloat  :: Double -> Double
foreign import cosFloat  :: Double -> Double
foreign import tanFloat  :: Double -> Double
foreign import intToFloat :: Int -> Double
foreign import floatToInt :: Double -> Int
foreign import showFloat :: Double -> String
foreign import bitSizeFloat :: Int

foreign import error :: String -> a
foreign import ohc "(E->C->E)" seq :: a -> b -> b