4e987026 |
-- interface.scm -- define interface to primitives
--
-- author : Sandra & John
-- date : 24 Apr 1992
--
-- This file declares the interface to the runtime system primitives.
-- The actual definitions for the Lisp functions all appear elsewhere;
-- they all have names like prim.xxx. (They can actually be macros
-- instead of functions since they're never referenced by name.)
interface PreludePrims where
{-# Prelude #-}
import PreludeCore(Int,Integer,Float,Double,Char,Bool)
import PreludeRational(Rational)
error :: String -> a
primCharToInt :: Char -> Int
primIntToChar :: Int -> Char
primEqChar, primNeqChar, primLeChar, primGtChar, primLsChar, primGeChar
:: Char -> Char -> Bool
primMaxChar :: Int
primEqFloat, primNeqFloat, primLeFloat, primGtFloat, primLsFloat, primGeFloat
:: Float -> Float -> Bool
primFloatMax, primFloatMin :: Float -> Float -> Float
primEqDouble, primNeqDouble, primLeDouble, primGtDouble,
primLsDouble, primGeDouble
:: Double -> Double -> Bool
primDoubleMax, primDoubleMin :: Double -> Double -> Double
primPlusFloat, primMinusFloat, primMulFloat, primDivFloat
:: Float -> Float -> Float
primPlusDouble, primMinusDouble, primMulDouble, primDivDouble
:: Double -> Double -> Double
primNegFloat, primAbsFloat :: Float -> Float
primNegDouble, primAbsDouble :: Double -> Double
primExpFloat, primLogFloat, primSqrtFloat, primSinFloat, primCosFloat,
primTanFloat, primAsinFloat, primAcosFloat, primAtanFloat, primSinhFloat,
primCoshFloat, primTanhFloat, primAsinhFloat, primAcoshFloat, primAtanhFloat
:: Float -> Float
primExpDouble, primLogDouble, primSqrtDouble, primSinDouble, primCosDouble,
primTanDouble, primAsinDouble, primAcosDouble, primAtanDouble, primSinhDouble,
primCoshDouble, primTanhDouble, primAsinhDouble, primAcoshDouble, primAtanhDouble
:: Double -> Double
primPiFloat :: Float
primPiDouble :: Double
primRationalToFloat :: Rational -> Float
primRationalToDouble :: Rational -> Double
primFloatToRational :: Float -> Rational
primDoubleToRational :: Double -> Rational
primFloatDigits :: Int
primFloatRadix :: Integer
primFloatMinExp :: Int
primFloatMaxExp :: Int
primFloatRange :: Float -> (Int, Int)
primDecodeFloat :: Float -> (Integer, Int)
primEncodeFloat :: Integer -> Int -> Float
primDoubleDigits :: Int
primDoubleRadix :: Integer
primDoubleMinExp :: Int
primDoubleMaxExp :: Int
primDoubleRange :: Double -> (Int, Int)
primDecodeDouble :: Double -> (Integer, Int)
primEncodeDouble :: Integer -> Int -> Double
primEqInt, primNeqInt, primLeInt, primGtInt, primLsInt, primGeInt
:: Int -> Int -> Bool
primIntMax, primIntMin :: Int -> Int -> Int
primEqInteger, primNeqInteger, primLeInteger, primGtInteger,
primLsInteger, primGeInteger
:: Integer -> Integer -> Bool
primIntegerMax, primIntegerMin :: Integer -> Integer -> Integer
primPlusInt, primMinusInt, primMulInt :: Int -> Int -> Int
primMinInt,primMaxInt :: Int
primNegInt, primAbsInt :: Int -> Int
primPlusInteger, primMinusInteger, primMulInteger :: Integer -> Integer -> Integer
primNegInteger, primAbsInteger :: Integer -> Integer
primQuotRemInt :: Int -> Int -> (Int, Int)
primQuotRemInteger :: Integer -> Integer -> (Integer, Integer)
primIntegerToInt :: Integer -> Int
primIntToInteger :: Int -> Integer
primNullBin :: Bin
primIsNullBin :: Bin -> Bool
primShowBinInt :: Int -> Bin -> Bin
primShowBinInteger :: Integer -> Bin -> Bin
primShowBinFloat :: Float -> Bin -> Bin
primShowBinDouble :: Double -> Bin -> Bin
primReadBinInt :: Bin -> (Int,Bin)
primReadBinInteger :: Bin -> (Integer,Bin)
primReadBinFloat :: Bin -> (Float,Bin)
primReadBinDouble :: Bin -> (Double,Bin)
primReadBinSmallInt :: Bin -> Int -> (Int,Bin)
primAppendBin :: Bin -> Bin -> Bin
primStringEq :: [Char] -> [Char] -> Bool
primAppend :: [a] -> [a] -> [a]
primTake :: Int -> [a] -> [a]
foldr :: (a -> b -> b) -> b -> [a] -> b
build :: ((a -> [a] -> [a]) -> [b] -> [c]) -> [c]
-- I've assigned complexities for arithmetic primitives as follows:
-- Int and Char comparisons and arithmetic are very cheap (complexity 1).
-- Double and Float comparsions are also cheap, but most implementations
-- need to box the results of floating-point arithmetic so I have given
-- them a complexity of 3.
-- Integer operations need to do an extra bignum check that has a fixed
-- overhead. I assume that actual bignums will be rare and give them
-- all a complexity of 2.
{-#
error :: LispName("prim.abort")
primCharToInt :: LispName("prim.char-to-int"), Complexity(0),NoConversion
primIntToChar :: LispName("prim.int-to-char"), Complexity(0),NoConversion
primEqChar :: LispName("prim.eq-char"), Complexity(1), NoConversion
primNeqChar:: LispName("prim.not-eq-char"), Complexity(1), NoConversion
primLeChar :: LispName("prim.le-char"), Complexity(1), NoConversion
primGtChar :: LispName("prim.not-le-char"), Complexity(1), NoConversion
primLsChar :: LispName("prim.lt-char"), Complexity(1), NoConversion
primGeChar :: LispName("prim.not-lt-char"), Complexity(1), NoConversion
primMaxChar :: LispName("prim.max-char"), NoConversion
primEqFloat :: LispName("prim.eq-float"), Complexity(1)
primNeqFloat :: LispName("prim.not-eq-float"), Complexity(1)
primLeFloat :: LispName("prim.le-float"), Complexity(1)
primGtFloat :: LispName("prim.not-le-float"), Complexity(1)
primLsFloat :: LispName("prim.lt-float"), Complexity(1)
primGeFloat :: LispName("prim.not-lt-float"), Complexity(1)
primFloatMax :: LispName("prim.float-max"), Complexity(3)
primFloatMin :: LispName("prim.float-min"), Complexity(3)
primEqDouble :: LispName("prim.eq-double"), Complexity(1)
primNeqDouble :: LispName("prim.not-eq-double"), Complexity(1)
primLeDouble :: LispName("prim.le-double"), Complexity(1)
primGtDouble :: LispName("prim.not-le-double"), Complexity(1)
primLsDouble :: LispName("prim.lt-double"), Complexity(1)
primGeDouble :: LispName("prim.not-lt-double"), Complexity(1)
primDoubleMax :: LispName("prim.double-max"), Complexity(3)
primDoubleMin :: LispName("prim.double-min"), Complexity(3)
primPlusFloat :: LispName("prim.plus-float"), Complexity(3)
primMinusFloat :: LispName("prim.minus-float"), Complexity(3)
primMulFloat :: LispName("prim.mul-float"), Complexity(3)
primDivFloat :: LispName("prim.div-float"), Complexity(3)
primPlusDouble :: LispName("prim.plus-double"), Complexity(3)
primMinusDouble :: LispName("prim.minus-double"), Complexity(3)
primMulDouble :: LispName("prim.mul-double"), Complexity(3)
primDivDouble :: LispName("prim.div-double"), Complexity(3)
primNegFloat :: LispName("prim.neg-float"), Complexity(3)
primAbsFloat :: LispName("prim.abs-float"), Complexity(3)
primNegDouble :: LispName("prim.neg-double"), Complexity(3)
primAbsDouble :: LispName("prim.abs-double"), Complexity(3)
primExpFloat :: LispName("prim.exp-float")
primLogFloat :: LispName("prim.log-float")
primSqrtFloat :: LispName("prim.sqrt-float")
primSinFloat :: LispName("prim.sin-float")
primCosFloat :: LispName("prim.cos-float")
primTanFloat :: LispName("prim.tan-float")
primAsinFloat :: LispName("prim.asin-float")
primAcosFloat :: LispName("prim.acos-float")
primAtanFloat :: LispName("prim.atan-float")
primSinhFloat :: LispName("prim.sinh-float")
primCoshFloat :: LispName("prim.cosh-float")
primTanhFloat :: LispName("prim.tanh-float")
primAsinhFloat :: LispName("prim.asinh-float")
primAcoshFloat :: LispName("prim.acosh-float")
primAtanhFloat :: LispName("prim.atanh-float")
primExpDouble :: LispName("prim.exp-double")
primLogDouble :: LispName("prim.log-double")
primSqrtDouble :: LispName("prim.sqrt-double")
primSinDouble :: LispName("prim.sin-double")
primCosDouble :: LispName("prim.cos-double")
primTanDouble :: LispName("prim.tan-double")
primAsinDouble :: LispName("prim.asin-double")
primAcosDouble :: LispName("prim.acos-double")
primAtanDouble :: LispName("prim.atan-double")
primSinhDouble :: LispName("prim.sinh-double")
primCoshDouble :: LispName("prim.cosh-double")
primTanhDouble :: LispName("prim.tanh-double")
primAsinhDouble :: LispName("prim.asinh-double")
primAcoshDouble :: LispName("prim.acosh-double")
primAtanhDouble :: LispName("prim.atanh-double")
primPiFloat :: LispName("prim.pi-float")
primPiDouble :: LispName("prim.pi-double")
primRationalToFloat :: LispName("prim.rational-to-float"), Complexity(3)
primRationalToDouble :: LispName("prim.rational-to-double"), Complexity(3)
primFloatToRational :: LispName("prim.float-to-rational"), Complexity(3)
primDoubleToRational :: LispName("prim.double-to-rational"), Complexity(3)
primFloatDigits :: LispName("prim.float-digits")
primFloatRadix :: LispName("prim.float-radix")
primFloatMinExp :: LispName("prim.float-min-exp")
primFloatMaxExp :: LispName("prim.float-max-exp")
primFloatRange :: LispName("prim.float-range")
primDecodeFloat :: LispName("prim.decode-float")
primEncodeFloat :: LispName("prim.encode-float")
primDoubleDigits :: LispName("prim.double-digits")
primDoubleRadix :: LispName("prim.double-radix")
primDoubleMinExp :: LispName("prim.double-min-exp")
primDoubleMaxExp :: LispName("prim.double-max-exp")
primDoubleRange :: LispName("prim.double-range")
primDecodeDouble :: LispName("prim.decode-double")
primEncodeDouble :: LispName("prim.encode-double")
primEqInt :: LispName("prim.eq-int"), Complexity(1)
primNeqInt:: LispName("prim.not-eq-int"), Complexity(1)
primLeInt :: LispName("prim.le-int"), Complexity(1)
primGtInt :: LispName("prim.not-le-int"), Complexity(1)
primLsInt :: LispName("prim.lt-int"), Complexity(1)
primGeInt :: LispName("prim.not-lt-int"), Complexity(1)
primIntMax :: LispName("prim.int-max"), Complexity(1)
primIntMin :: LispName("prim.int-min"), Complexity(1)
primEqInteger :: LispName("prim.eq-integer"), Complexity(2)
primNeqInteger:: LispName("prim.not-eq-integer"), Complexity(2)
primLeInteger :: LispName("prim.le-integer"), Complexity(2)
primGtInteger :: LispName("prim.not-le-integer"), Complexity(2)
primLsInteger :: LispName("prim.lt-integer"), Complexity(2)
primGeInteger :: LispName("prim.not-lt-integer"), Complexity(2)
primIntegerMax :: LispName("prim.integer-max"), Complexity(2)
primIntegerMin :: LispName("prim.integer-min"), Complexity(2)
primPlusInt :: LispName("prim.plus-int"), Complexity(1)
primMinusInt :: LispName("prim.minus-int"), Complexity(1)
primMulInt :: LispName("prim.mul-int"), Complexity(1)
primMinInt :: LispName("prim.minint")
primMaxInt :: LispName("prim.maxint")
primNegInt :: LispName("prim.neg-int"), Complexity(1)
primAbsInt :: LispName("prim.abs-int"), Complexity(1)
primPlusInteger :: LispName("prim.plus-integer"), Complexity(2)
primMinusInteger :: LispName("prim.minus-integer"), Complexity(2)
primMulInteger :: LispName("prim.mul-integer"), Complexity(2)
primNegInteger :: LispName("prim.neg-integer"), Complexity(2)
primAbsInteger :: LispName("prim.abs-integer"), Complexity(2)
primQuotRemInt :: LispName("prim.div-rem-int")
primQuotRemInteger :: LispName("prim.div-rem-integer")
primIntegerToInt :: LispName("prim.integer-to-int"), Complexity(1)
primIntToInteger :: LispName("prim.int-to-integer"), Complexity(0)
primNullBin :: LispName("prim.nullbin")
primIsNullBin :: LispName("prim.is-null-bin"), Complexity(1)
primShowBinInt :: LispName("prim.show-bin-int"), Complexity(2)
primShowBinInteger :: LispName("prim.show-bin-integer"), Complexity(2)
primShowBinFloat :: LispName("prim.show-bin-float"), Complexity(2)
primShowBinDouble :: LispName("prim.show-bin-double"), Complexity(2)
primReadBinInt :: LispName("prim.read-bin-int")
primReadBinInteger :: LispName("prim.read-bin-integer")
primReadBinFloat :: LispName("prim.read-bin-float")
primReadBinDouble :: LispName("prim.read-bin-double")
primReadBinSmallInt :: LispName("prim.read-bin-small-int")
primAppendBin :: LispName("prim.append-bin")
primStringEq :: LispName("prim.string-eq"), Strictness("S,S"), NoConversion
primAppend :: LispName("prim.append"), Strictness("S,N"), NoConversion
primTake :: LispName("prim.take"), Strictness("S,S"), NoConversion
foldr :: LispName("prim.foldr"), Strictness("N,N,S"), NoConversion
build :: LispName("prim.build"), Strictness("S"), NoConversion
#-}
|