module PreludeBuiltin where import qualified Builtin primIntZero = Builtin.ord '\0' primDoubleZero = Builtin.intToFloat primIntZero --foreign import primIntToChar :: Int -> Char primIntToChar x = Builtin.chr x --foreign import primCharToInt :: Char -> Int primCharToInt x = Builtin.ord x --foreign import primUnicodeMaxChar :: Char -- = '\xffff' primUnicodeMaxChar = '\1114111' --foreign import primIntEq :: Int -> Int -> Bool primIntEq x y = Builtin.eqInt x y --foreign import primIntLte :: Int -> Int -> Bool primIntLte x y = Builtin.lteInt x y --foreign import primIntAdd :: Int -> Int -> Int primIntAdd x y = (Builtin.+) x y --foreign import primIntSub :: Int -> Int -> Int primIntSub x y = (Builtin.-) x y --foreign import primIntMul :: Int -> Int -> Int primIntMul x y = (Builtin.*) x y --foreign import primIntQuot :: Int -> Int -> Int primIntQuot x y = (Builtin.quot) x y --foreign import primIntRem :: Int -> Int -> Int primIntRem x y = (Builtin.rem) x y --foreign import primIntNegate :: Int -> Int primIntNegate x = Builtin.negate x --foreign import primIntAbs :: Int -> Int primIntAbs x = if primIntLte primIntZero x then x else primIntNegate x --foreign import primIntSignum :: Int -> Int primIntSignum = Builtin.signumInt --foreign import primIntMinBound :: Int --foreign import primIntMaxBound :: Int primIntMinBound = Builtin.minInt primIntMaxBound = Builtin.maxInt primIntBitSize = Builtin.bitSizeInt --foreign import primError :: String -> a primError = Builtin.error --foreign import primSeq :: a -> b -> b --primSeq x y = y -- !!! primSeq = Builtin.seq primIntQuotRem x y = (x `primIntQuot` y,x `primIntRem` y) primCharEq c c' = Builtin.eqChar c c' primCharLte c c' = Builtin.lteChar c c' --foreign import primInteger2Int :: Integer -> Int --primInteger2Int x = x -- !!! --foreign import primInt2Integer :: Int -> Integer --primInt2Integer x = x -- !!! {- foreign import primIntegerLte :: Integer -> Integer -> Bool foreign import primIntegerEq :: Integer -> Integer -> Bool foreign import primIntegerAdd :: Integer -> Integer -> Integer foreign import primIntegerSub :: Integer -> Integer -> Integer foreign import primIntegerMul :: Integer -> Integer -> Integer foreign import primIntegerNegate :: Integer -> Integer foreign import primIntegerAbs :: Integer -> Integer foreign import primIntegerSignum :: Integer -> Integer foreign import primIntegerQuot :: Integer -> Integer -> Integer foreign import primIntegerRem :: Integer -> Integer -> Integer foreign import primFloatLte :: Float -> Float -> Bool foreign import primFloatEq :: Float -> Float -> Bool foreign import primFloatAdd :: Float -> Float -> Float foreign import primFloatSub :: Float -> Float -> Float foreign import primFloatMul :: Float -> Float -> Float foreign import primFloatNegate :: Float -> Float foreign import primFloatAbs :: Float -> Float foreign import primFloatSignum :: Float -> Float foreign import primFloatFromInteger :: Integer -> Float -} primDoubleLte = Builtin.lteFloat primDoubleEq = Builtin.eqFloat primDoubleAdd = Builtin.plusFloat primDoubleSub = Builtin.minusFloat primDoubleMul = Builtin.mulFloat primDoubleDiv = Builtin.divFloat primDoubleNegate = Builtin.negateFloat primDoubleTrunc = Builtin.truncFloat primDoubleRound = Builtin.roundFloat primDoubleFloor = Builtin.floorFloat primDoubleCeil = Builtin.ceilFloat primDoubleAbs x = if primDoubleLte x 0 then primDoubleNegate x else x primDoubleSignum = Builtin.signumFloat primDoubleBitSize = Builtin.bitSizeFloat primDoubleFromInt = Builtin.intToFloat --primDoubleFromInteger = Builtin.intToFloat . fromInteger -- !! primIntegralFromDouble x = fromIntegral (Builtin.floatToInt x) -- !! primDoubleShow = Builtin.showFloat --foreign import primDoubleEncodeFloat :: Integer -> Int -> Double primDoubleExp = Builtin.expFloat primDoubleExp2 = Builtin.exp2Float primDoubleLog = Builtin.logFloat primDoubleLog2 = Builtin.log2Float primDoubleSin = Builtin.sinFloat primDoubleCos = Builtin.cosFloat primDoubleTan = Builtin.tanFloat