packages feed

hat-2.7.0.0: libraries/PreludeBuiltin.hs

-- Contains foreign haskell declarations for all functions
-- not (portably) definable in Haskell.
module PreludeBuiltin (
  -- reexport from module PreludeBuiltinTypes   
  (->),Bool(True,False),Char,Int,Integer,Float,Double,IOError 
  ,[]((:),[]),IO
  ,()(())
  ,(,)((,)), (,,)((,,)),(,,,)((,,,)),(,,,,)((,,,,)),(,,,,,)((,,,,,))
  ,(,,,,,,)((,,,,,,)),(,,,,,,,)((,,,,,,,)),(,,,,,,,,)((,,,,,,,,))
  ,(,,,,,,,,,)((,,,,,,,,,)),(,,,,,,,,,,)((,,,,,,,,,,))
  ,(,,,,,,,,,,,)((,,,,,,,,,,,)),(,,,,,,,,,,,,)((,,,,,,,,,,,,))
  ,(,,,,,,,,,,,,,)((,,,,,,,,,,,,,)),(,,,,,,,,,,,,,,)((,,,,,,,,,,,,,,))
  ,String,error,undefined 
  -- general (->) 
  ,seq
  -- char 
-- ,Char	-- already re-exported above
  ,isAscii,isLatin1,isControl,isPrint,isSpace,isUpper,isLower,isAlpha,isDigit
  ,isOctDigit,isHexDigit,isAlphaNum,toUpper,toLower
  ,primIntToChar,primCharToInt,primUnicodeMaxBound 
  -- numeric
-- ,Int,Integer,Float,Double -- (,) 	-- already re-exported above
  ,primIntMinBound,primIntMaxBound
  ,primIntEq,primIntNe,primIntLt,primIntLe,primIntGt,primIntGe
  ,primIntQuot,primIntRem,primIntPlus,primIntMinus,primIntTimes
  ,primIntNegate,primIntAbs,primIntSignum,primIntegerFromInt
  ,primIntFromInteger,primIntegerEq,primIntegerNe,primIntegerLt
  ,primIntegerLe,primIntegerGt,primIntegerGe,primIntegerQuot
  ,primIntegerRem,primIntegerQuotRem ,primIntegerAdd
  ,primIntegerSub,primIntegerMul,primIntegerNeg
  ,primFloatFromInteger,primFloatRadix,primFloatDigits,primFloatRange
  ,primDecodeFloat,primEncodeFloat,primFloatIsNaN,primFloatIsInfinite
  ,primFloatIsDenormalized,primFloatIsNegativeZero,primFloatIsIEEE
  ,primFloatEq,primFloatNe,primFloatLt,primFloatLe,primFloatGt
  ,primFloatGe,primFloatPi,primFloatExp,primFloatLog,primFloatSqrt
  ,primFloatSin,primFloatCos,primFloatTan,primFloatAsin
  ,primFloatAcos,primFloatAtan,primFloatDiv,primFloatAdd
  ,primFloatSub,primFloatMul,primFloatAbs,primFloatSignum
  ,primDoubleFromInteger,primDoubleRadix,primDoubleDigits,primDoubleRange
  ,primDecodeDouble,primEncodeDouble,primDoubleIsNaN,primDoubleIsInfinite
  ,primDoubleIsDenormalized,primDoubleIsNegativeZero,primDoubleIsIEEE
  ,primDoubleEq,primDoubleNe,primDoubleLt,primDoubleLe
  ,primDoubleGt,primDoubleGe,primDoublePi,primDoubleExp,primDoubleLog
  ,primDoubleSqrt,primDoubleSin,primDoubleCos,primDoubleTan
  ,primDoubleAsin,primDoubleAcos,primDoubleAtan,primDoubleDiv
  ,primDoubleAdd,primDoubleSub,primDoubleMul,primDoubleAbs
  ,primDoubleSignum 
  -- IO 
-- ,IO,IOError -- ()	-- already re-exported above
  ,primIOBind,primIOReturn
  ,ioError,userError,catch,putChar,getChar,getContents,readFile,writeFile
  ,appendFile,primIOErrorShow{- ,primIOErrorEq -} 
  ) where

import PreludeBuiltinTypes
import TraceOrigHat.Hat  -- for some primitive types
import qualified TraceOrigPrelude  -- not to be transformed
import qualified TraceOrigData.Char as TraceOrigChar  -- not to be transformed

-- types appearing here
-- (->), String, Char, Bool, Int, Integer, Float, Double, (,), IO, IOError, ()

-- general:

infixr 0 `seq`

foreign import haskell "Prelude.seq"
  seq :: a -> b -> b

foreign import haskell "Char.isAscii"
  isAscii :: Char -> Bool
foreign import haskell "Char.isLatin1"
  isLatin1 :: Char -> Bool
foreign import haskell "Char.isControl"
  isControl :: Char -> Bool
foreign import haskell "Char.isPrint"
  isPrint :: Char -> Bool
foreign import haskell "Char.isSpace"
  isSpace :: Char -> Bool
foreign import haskell "Char.isUpper"
  isUpper :: Char -> Bool
foreign import haskell "Char.isLower"
  isLower :: Char -> Bool
foreign import haskell "Char.isAlpha"
  isAlpha :: Char -> Bool
foreign import haskell "Char.isDigit"
  isDigit :: Char -> Bool
foreign import haskell "Char.isOctDigit"
  isOctDigit :: Char -> Bool
foreign import haskell "Char.isHexDigit"
  isHexDigit :: Char -> Bool
foreign import haskell "Char.isAlphaNum"
  isAlphaNum :: Char -> Bool

foreign import haskell "Char.toUpper"
  toUpper :: Char -> Char
foreign import haskell "Char.toLower"
  toLower :: Char -> Char

-- Character code functions
foreign import haskell "Char.ord"
  primCharToInt :: Char -> Int
foreign import haskell "Char.chr"
  primIntToChar :: Int  -> Char

foreign import haskell "Prelude.maxBound"
  primUnicodeMaxBound :: Char


-- Numerics

-- system dependent
foreign import haskell "Prelude.minBound"
  primIntMinBound :: Int
foreign import haskell "Prelude.maxBound"
  primIntMaxBound :: Int

foreign import haskell "Prelude.=="
  primIntEq :: Int -> Int -> Bool
foreign import haskell "Prelude./="
  primIntNe :: Int -> Int -> Bool
foreign import haskell "Prelude.<"
  primIntLt :: Int -> Int -> Bool
foreign import haskell "Prelude.<="
  primIntLe :: Int -> Int -> Bool
foreign import haskell "Prelude.>"
  primIntGt :: Int -> Int -> Bool
foreign import haskell "Prelude.>="
  primIntGe :: Int -> Int -> Bool
foreign import haskell "Prelude.quot"
  primIntQuot   :: Int -> Int -> Int
foreign import haskell "Prelude.rem"
  primIntRem    :: Int -> Int -> Int
foreign import haskell "Prelude.+"
  primIntPlus   :: Int -> Int -> Int
foreign import haskell "Prelude.-"
  primIntMinus  :: Int -> Int -> Int
foreign import haskell "Prelude.*"
  primIntTimes  :: Int -> Int -> Int
foreign import haskell "Prelude.negate"
  primIntNegate :: Int -> Int
foreign import haskell "Prelude.abs"
  primIntAbs    :: Int -> Int
foreign import haskell "Prelude.signum"
  primIntSignum :: Int -> Int

foreign import haskell "Prelude.toInteger"
  primIntegerFromInt :: Int -> Integer
foreign import haskell "Prelude.fromInteger"
  primIntFromInteger :: Integer -> Int

foreign import haskell "Prelude.=="
  primIntegerEq :: Integer -> Integer -> Bool
foreign import haskell "Prelude./="
  primIntegerNe :: Integer -> Integer -> Bool
foreign import haskell "Prelude.<"
  primIntegerLt :: Integer -> Integer -> Bool
foreign import haskell "Prelude.<="
  primIntegerLe :: Integer -> Integer -> Bool
foreign import haskell "Prelude.>"
  primIntegerGt :: Integer -> Integer -> Bool
foreign import haskell "Prelude.>="
  primIntegerGe :: Integer -> Integer -> Bool
foreign import haskell "Prelude.quot"
  primIntegerQuot    :: Integer -> Integer -> Integer
foreign import haskell "Prelude.rem"
  primIntegerRem     :: Integer -> Integer -> Integer
foreign import haskell "Prelude.quotRem"
  primIntegerQuotRem :: Integer -> Integer -> (Integer,Integer)
foreign import haskell "Prelude.+"
  primIntegerAdd     :: Integer -> Integer -> Integer
foreign import haskell "Prelude.-"
  primIntegerSub     :: Integer -> Integer -> Integer
foreign import haskell "Prelude.*"
  primIntegerMul     :: Integer -> Integer -> Integer
foreign import haskell "Prelude.negate"
  primIntegerNeg     :: Integer -> Integer

foreign import haskell "Prelude.fromInteger"
  primFloatFromInteger  :: Integer -> Float
foreign import haskell "Prelude.floatRadix"
  primFloatRadix        :: Float -> Integer
foreign import haskell "Prelude.floatDigits"
  primFloatDigits       :: Float -> Int
foreign import haskell "Prelude.floatRange"
  primFloatRange        :: Float -> (Int,Int) 
foreign import haskell "Prelude.decodeFloat"
  primDecodeFloat       :: Float -> (Integer,Int)
foreign import haskell "Prelude.encodeFloat"
  primEncodeFloat       :: Integer -> Int -> Float
foreign import haskell "Prelude.isNaN"
  primFloatIsNaN   :: Float -> Bool
foreign import haskell "Prelude.isInfinite"
  primFloatIsInfinite   :: Float -> Bool
foreign import haskell "Prelude.isDenormalized"
  primFloatIsDenormalized   :: Float -> Bool
foreign import haskell "Prelude.isNegativeZero"
  primFloatIsNegativeZero   :: Float -> Bool
foreign import haskell "Prelude.isIEEE"
  primFloatIsIEEE   :: Float -> Bool

foreign import haskell "Prelude.=="
  primFloatEq :: Float -> Float -> Bool
foreign import haskell "Prelude./="
  primFloatNe :: Float -> Float -> Bool
foreign import haskell "Prelude.<"
  primFloatLt :: Float -> Float -> Bool
foreign import haskell "Prelude.<="
  primFloatLe :: Float -> Float -> Bool
foreign import haskell "Prelude.>"
  primFloatGt :: Float -> Float -> Bool
foreign import haskell "Prelude.>="
  primFloatGe :: Float -> Float -> Bool
foreign import haskell "Prelude.pi"
  primFloatPi :: Float
foreign import haskell "Prelude.exp"
  primFloatExp  :: Float -> Float
foreign import haskell "Prelude.log"
  primFloatLog  :: Float -> Float
foreign import haskell "Prelude.sqrt"
  primFloatSqrt :: Float -> Float
foreign import haskell "Prelude.sin"
  primFloatSin  :: Float -> Float
foreign import haskell "Prelude.cos"
  primFloatCos  :: Float -> Float
foreign import haskell "Prelude.tan"
  primFloatTan  :: Float -> Float
foreign import haskell "Prelude.asin"
  primFloatAsin :: Float -> Float
foreign import haskell "Prelude.acos"
  primFloatAcos :: Float -> Float
foreign import haskell "Prelude.atan"
  primFloatAtan :: Float -> Float
foreign import haskell "Prelude./"
  primFloatDiv  :: Float -> Float -> Float
foreign import haskell "Prelude.+"
  primFloatAdd  :: Float -> Float -> Float
foreign import haskell "Prelude.-"
  primFloatSub  :: Float -> Float -> Float
foreign import haskell "Prelude.*"
  primFloatMul  :: Float -> Float -> Float
foreign import haskell "Prelude.abs"
  primFloatAbs    :: Float -> Float
foreign import haskell "Prelude.signum"
  primFloatSignum :: Float -> Float

foreign import haskell "Prelude.fromInteger"
  primDoubleFromInteger :: Integer -> Double
foreign import haskell "Prelude.floatRadix"
  primDoubleRadix   :: Double -> Integer
foreign import haskell "Prelude.floatDigits"
  primDoubleDigits  :: Double -> Int
foreign import haskell "Prelude.floatRange"
  primDoubleRange   :: Double -> (Int,Int)
foreign import haskell "Prelude.decodeFloat"
  primDecodeDouble :: Double -> (Integer,Int)
foreign import haskell "Prelude.encodeFloat"
  primEncodeDouble :: Integer -> Int -> Double
foreign import haskell "Prelude.isNaN"
  primDoubleIsNaN   :: Double -> Bool
foreign import haskell "Prelude.isInfinite"
  primDoubleIsInfinite   :: Double -> Bool
foreign import haskell "Prelude.isDenormalized"
  primDoubleIsDenormalized   :: Double -> Bool
foreign import haskell "Prelude.isNegativeZero"
  primDoubleIsNegativeZero   :: Double -> Bool
foreign import haskell "Prelude.isIEEE"
  primDoubleIsIEEE   :: Double -> Bool

foreign import haskell "Prelude.=="
  primDoubleEq :: Double -> Double -> Bool
foreign import haskell "Prelude./="
  primDoubleNe :: Double -> Double -> Bool
foreign import haskell "Prelude.<"
  primDoubleLt :: Double -> Double -> Bool
foreign import haskell "Prelude.<="
  primDoubleLe :: Double -> Double -> Bool
foreign import haskell "Prelude.>"
  primDoubleGt :: Double -> Double -> Bool
foreign import haskell "Prelude.>="
  primDoubleGe :: Double -> Double -> Bool
foreign import haskell "Prelude.pi"
  primDoublePi :: Double
foreign import haskell "Prelude.exp"
  primDoubleExp  :: Double -> Double
foreign import haskell "Prelude.log"
  primDoubleLog  :: Double -> Double
foreign import haskell "Prelude.sqrt"
  primDoubleSqrt :: Double -> Double
foreign import haskell "Prelude.sin"
  primDoubleSin  :: Double -> Double
foreign import haskell "Prelude.cos"
  primDoubleCos  :: Double -> Double
foreign import haskell "Prelude.tan"
  primDoubleTan  :: Double -> Double
foreign import haskell "Prelude.asin"
  primDoubleAsin :: Double -> Double
foreign import haskell "Prelude.acos"
  primDoubleAcos :: Double -> Double
foreign import haskell "Prelude.atan"
  primDoubleAtan :: Double -> Double
foreign import haskell "Prelude./"
  primDoubleDiv  :: Double -> Double -> Double
foreign import haskell "Prelude.+"
  primDoubleAdd  :: Double -> Double -> Double
foreign import haskell "Prelude.-"
  primDoubleSub  :: Double -> Double -> Double
foreign import haskell "Prelude.*"
  primDoubleMul  :: Double -> Double -> Double
foreign import haskell "Prelude.abs"
  primDoubleAbs    :: Double -> Double
foreign import haskell "Prelude.signum"
  primDoubleSignum :: Double -> Double


-- IO

foreign import haskell "Prelude.>>="
  primIOBind :: IO a -> (a -> IO b) -> IO b
foreign import haskell "Prelude.return"
  primIOReturn :: a -> IO a


foreign import haskell "Prelude.show"
  primIOErrorShow :: IOError -> String

{- currently excluded because instance Eq IOError missing in ghc 5.02
foreign import haskell "Prelude.=="
  primIOErrorEq :: IOError -> IOError -> Bool
-}


foreign import haskell "Prelude.ioError"
  ioError ::  IOError -> IO a 

foreign import haskell "Prelude.userError"
  userError ::  String -> IOError

foreign import haskell "Prelude.catch"
  catch ::  IO a -> (IOError -> IO a) -> IO a 

-- foreign import haskell "Prelude.putChar"
--   putChar :: Char -> IO ()
-- HACK!
foreign import haskell 
  "(\\_ c -> T.outputTrace kputChar [c] Prelude.>> Prelude.putChar c) Prelude.True"
  putChar :: Char -> IO ()

foreign import haskell "Prelude.getChar"
  getChar          :: IO Char

foreign import haskell "Prelude.getContents"
  getContents      :: IO String

foreign import haskell "Prelude.readFile"
  readFile         :: String -> IO String

foreign import haskell "(\\_ n s -> T.outputTrace kwriteFile s Prelude.>> Prelude.writeFile n s) Prelude.True"
  writeFile        :: String -> String -> IO ()

foreign import haskell "(\\_ n s -> T.outputTrace kappendFile s Prelude.>> Prelude.appendFile n s) Prelude.True"
  appendFile       :: String -> String -> IO ()