{-# LINE 1 "lib/CPython/Protocols/Number.chs" #-}
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE ExistentialQuantification #-}
module CPython.Protocols.Number
( Number (..)
, SomeNumber
, castToNumber
, add
, subtract
, multiply
, floorDivide
, trueDivide
, remainder
, divmod
, power
, negative
, positive
, absolute
, invert
, shiftL
, shiftR
, and
, xor
, or
, inPlaceAdd
, inPlaceSubtract
, inPlaceMultiply
, inPlaceFloorDivide
, inPlaceTrueDivide
, inPlaceRemainder
, inPlacePower
, inPlaceShiftL
, inPlaceShiftR
, inPlaceAnd
, inPlaceXor
, inPlaceOr
, toInteger
, toFloat
, toBase
) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import Prelude hiding (Integer, Float, subtract, and, or, toInteger)
import qualified Prelude as Prelude
import CPython.Constants (none)
import CPython.Internal hiding (xor, shiftR, shiftL)
import CPython.Types.Complex (Complex)
import CPython.Types.Float (Float)
import CPython.Types.Integer (Integer)
import CPython.Types.Set (Set, FrozenSet)
import CPython.Types.Unicode (Unicode)
data = forall a. (Number a) => (ForeignPtr a)
class Object a => Number a where
toNumber :: a -> SomeNumber
instance Object SomeNumber where
toObject :: SomeNumber -> SomeObject
toObject (SomeNumber x :: ForeignPtr a
x) = ForeignPtr a -> SomeObject
forall a. Object a => ForeignPtr a -> SomeObject
SomeObject ForeignPtr a
x
fromForeignPtr :: ForeignPtr SomeNumber -> SomeNumber
fromForeignPtr = ForeignPtr SomeNumber -> SomeNumber
forall a. Number a => ForeignPtr a -> SomeNumber
SomeNumber
instance Number SomeNumber where
toNumber :: SomeNumber -> SomeNumber
toNumber = SomeNumber -> SomeNumber
forall a. a -> a
id
instance Number Integer where
toNumber :: Integer -> SomeNumber
toNumber = Integer -> SomeNumber
forall a. Object a => a -> SomeNumber
unsafeCastToNumber
instance Number Float where
toNumber :: Float -> SomeNumber
toNumber = Float -> SomeNumber
forall a. Object a => a -> SomeNumber
unsafeCastToNumber
instance Number Complex where
toNumber :: Complex -> SomeNumber
toNumber = Complex -> SomeNumber
forall a. Object a => a -> SomeNumber
unsafeCastToNumber
instance Number Set where
toNumber :: Set -> SomeNumber
toNumber = Set -> SomeNumber
forall a. Object a => a -> SomeNumber
unsafeCastToNumber
instance Number FrozenSet where
toNumber :: FrozenSet -> SomeNumber
toNumber = FrozenSet -> SomeNumber
forall a. Object a => a -> SomeNumber
unsafeCastToNumber
unsafeCastToNumber :: Object a => a -> SomeNumber
unsafeCastToNumber :: a -> SomeNumber
unsafeCastToNumber x :: a
x = case a -> SomeObject
forall a. Object a => a -> SomeObject
toObject a
x of
SomeObject ptr :: ForeignPtr a
ptr -> let
ptr' :: ForeignPtr SomeNumber
ptr' = ForeignPtr a -> ForeignPtr SomeNumber
forall a b. ForeignPtr a -> ForeignPtr b
castForeignPtr ForeignPtr a
ptr :: ForeignPtr SomeNumber
in ForeignPtr SomeNumber -> SomeNumber
forall a. Number a => ForeignPtr a -> SomeNumber
SomeNumber ForeignPtr SomeNumber
ptr'
castToNumber :: Object a => a -> IO (Maybe SomeNumber)
castToNumber :: a -> IO (Maybe SomeNumber)
castToNumber obj :: a
obj =
a -> (Ptr () -> IO (Maybe SomeNumber)) -> IO (Maybe SomeNumber)
forall obj a b. Object obj => obj -> (Ptr a -> IO b) -> IO b
withObject a
obj ((Ptr () -> IO (Maybe SomeNumber)) -> IO (Maybe SomeNumber))
-> (Ptr () -> IO (Maybe SomeNumber)) -> IO (Maybe SomeNumber)
forall a b. (a -> b) -> a -> b
$ \objPtr :: Ptr ()
objPtr -> do
Bool
isNumber <- (CInt -> Bool) -> IO CInt -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap CInt -> Bool
cToBool (IO CInt -> IO Bool) -> IO CInt -> IO Bool
forall a b. (a -> b) -> a -> b
$ Ptr () -> IO CInt
pyNumberCheck Ptr ()
objPtr
Maybe SomeNumber -> IO (Maybe SomeNumber)
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe SomeNumber -> IO (Maybe SomeNumber))
-> Maybe SomeNumber -> IO (Maybe SomeNumber)
forall a b. (a -> b) -> a -> b
$ if Bool
isNumber
then SomeNumber -> Maybe SomeNumber
forall a. a -> Maybe a
Just (SomeNumber -> Maybe SomeNumber) -> SomeNumber -> Maybe SomeNumber
forall a b. (a -> b) -> a -> b
$ a -> SomeNumber
forall a. Object a => a -> SomeNumber
unsafeCastToNumber a
obj
else Maybe SomeNumber
forall a. Maybe a
Nothing
add :: (Number a, Number b) => a -> b -> IO SomeNumber
add :: a -> b -> IO SomeNumber
add = a -> b -> IO SomeNumber
forall a b. (Number a, Number b) => a -> b -> IO SomeNumber
c_add
c_add :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
c_add :: a -> b -> IO SomeNumber
c_add a1 :: a
a1 a2 :: b
a2 =
a -> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall obj a b. Object obj => obj -> (Ptr a -> IO b) -> IO b
withObject a
a1 ((Ptr () -> IO SomeNumber) -> IO SomeNumber)
-> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall a b. (a -> b) -> a -> b
$ \a1' :: Ptr ()
a1' ->
b -> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall obj a b. Object obj => obj -> (Ptr a -> IO b) -> IO b
withObject b
a2 ((Ptr () -> IO SomeNumber) -> IO SomeNumber)
-> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall a b. (a -> b) -> a -> b
$ \a2' :: Ptr ()
a2' ->
Ptr () -> Ptr () -> IO (Ptr ())
c_add'_ Ptr ()
a1' Ptr ()
a2' IO (Ptr ()) -> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res :: Ptr ()
res ->
Ptr () -> IO SomeNumber
forall obj a. Object obj => Ptr a -> IO obj
stealObject Ptr ()
res IO SomeNumber -> (SomeNumber -> IO SomeNumber) -> IO SomeNumber
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res' :: SomeNumber
res' ->
SomeNumber -> IO SomeNumber
forall (m :: * -> *) a. Monad m => a -> m a
return (SomeNumber
res')
{-# LINE 121 "lib/CPython/Protocols/Number.chs" #-}
subtract :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
subtract a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
subtract'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 127 "lib/CPython/Protocols/Number.chs" #-}
multiply :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
multiply a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
multiply'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 133 "lib/CPython/Protocols/Number.chs" #-}
floorDivide :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
floorDivide a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
floorDivide'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 139 "lib/CPython/Protocols/Number.chs" #-}
trueDivide :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
trueDivide a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
trueDivide'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 145 "lib/CPython/Protocols/Number.chs" #-}
remainder :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
remainder a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
remainder'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 151 "lib/CPython/Protocols/Number.chs" #-}
divmod :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
divmod a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
divmod'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 157 "lib/CPython/Protocols/Number.chs" #-}
power :: (Number a, Number b, Number c) => a -> b -> Maybe c -> IO SomeNumber
power a b mc =
withObject a $ \aPtr ->
withObject b $ \bPtr ->
maybe none (return . toObject) mc >>= \c ->
withObject c $ \cPtr ->
pyNumberPower aPtr bPtr cPtr
>>= stealObject
negative :: Number a => (a) -> IO ((SomeNumber))
negative :: a -> IO SomeNumber
negative a1 :: a
a1 =
a -> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall obj a b. Object obj => obj -> (Ptr a -> IO b) -> IO b
withObject a
a1 ((Ptr () -> IO SomeNumber) -> IO SomeNumber)
-> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall a b. (a -> b) -> a -> b
$ \a1' :: Ptr ()
a1' ->
Ptr () -> IO (Ptr ())
negative'_ Ptr ()
a1' IO (Ptr ()) -> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res :: Ptr ()
res ->
Ptr () -> IO SomeNumber
forall obj a. Object obj => Ptr a -> IO obj
stealObject Ptr ()
res IO SomeNumber -> (SomeNumber -> IO SomeNumber) -> IO SomeNumber
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res' :: SomeNumber
res' ->
SomeNumber -> IO SomeNumber
forall (m :: * -> *) a. Monad m => a -> m a
return (SomeNumber
res')
{-# LINE 171 "lib/CPython/Protocols/Number.chs" #-}
positive :: Number a => (a) -> IO ((SomeNumber))
positive a1 =
withObject a1 $ \a1' ->
positive'_ a1' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 176 "lib/CPython/Protocols/Number.chs" #-}
absolute :: Number a => (a) -> IO ((SomeNumber))
absolute a1 =
withObject a1 $ \a1' ->
absolute'_ a1' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 181 "lib/CPython/Protocols/Number.chs" #-}
invert :: Number a => (a) -> IO ((SomeNumber))
invert a1 =
withObject a1 $ \a1' ->
invert'_ a1' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 186 "lib/CPython/Protocols/Number.chs" #-}
shiftL :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
shiftL a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
shiftL'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 192 "lib/CPython/Protocols/Number.chs" #-}
shiftR :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
shiftR a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
shiftR'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 198 "lib/CPython/Protocols/Number.chs" #-}
and :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
and a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
and'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 204 "lib/CPython/Protocols/Number.chs" #-}
xor :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
xor a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
xor'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 210 "lib/CPython/Protocols/Number.chs" #-}
or :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
or a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
or'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 216 "lib/CPython/Protocols/Number.chs" #-}
inPlaceAdd :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
inPlaceAdd a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
inPlaceAdd'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 222 "lib/CPython/Protocols/Number.chs" #-}
inPlaceSubtract :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
inPlaceSubtract a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
inPlaceSubtract'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 228 "lib/CPython/Protocols/Number.chs" #-}
inPlaceMultiply :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
inPlaceMultiply a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
inPlaceMultiply'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 234 "lib/CPython/Protocols/Number.chs" #-}
inPlaceFloorDivide :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
inPlaceFloorDivide a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
inPlaceFloorDivide'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 240 "lib/CPython/Protocols/Number.chs" #-}
inPlaceTrueDivide :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
inPlaceTrueDivide a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
inPlaceTrueDivide'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 246 "lib/CPython/Protocols/Number.chs" #-}
inPlaceRemainder :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
inPlaceRemainder a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
inPlaceRemainder'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 252 "lib/CPython/Protocols/Number.chs" #-}
inPlacePower ::(Number a, Number b, Number c) => a -> b -> Maybe c -> IO SomeNumber
inPlacePower a b mc =
withObject a $ \aPtr ->
withObject b $ \bPtr ->
maybe none (return . toObject) mc >>= \c ->
withObject c $ \cPtr ->
pyNumberInPlacePower aPtr bPtr cPtr
>>= stealObject
inPlaceShiftL :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
inPlaceShiftL :: a -> b -> IO SomeNumber
inPlaceShiftL a1 :: a
a1 a2 :: b
a2 =
a -> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall obj a b. Object obj => obj -> (Ptr a -> IO b) -> IO b
withObject a
a1 ((Ptr () -> IO SomeNumber) -> IO SomeNumber)
-> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall a b. (a -> b) -> a -> b
$ \a1' :: Ptr ()
a1' ->
b -> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall obj a b. Object obj => obj -> (Ptr a -> IO b) -> IO b
withObject b
a2 ((Ptr () -> IO SomeNumber) -> IO SomeNumber)
-> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall a b. (a -> b) -> a -> b
$ \a2' :: Ptr ()
a2' ->
Ptr () -> Ptr () -> IO (Ptr ())
inPlaceShiftL'_ Ptr ()
a1' Ptr ()
a2' IO (Ptr ()) -> (Ptr () -> IO SomeNumber) -> IO SomeNumber
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res :: Ptr ()
res ->
Ptr () -> IO SomeNumber
forall obj a. Object obj => Ptr a -> IO obj
stealObject Ptr ()
res IO SomeNumber -> (SomeNumber -> IO SomeNumber) -> IO SomeNumber
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \res' :: SomeNumber
res' ->
SomeNumber -> IO SomeNumber
forall (m :: * -> *) a. Monad m => a -> m a
return (SomeNumber
res')
{-# LINE 267 "lib/CPython/Protocols/Number.chs" #-}
inPlaceShiftR :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
inPlaceShiftR a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
inPlaceShiftR'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 273 "lib/CPython/Protocols/Number.chs" #-}
inPlaceAnd :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
inPlaceAnd a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
inPlaceAnd'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 279 "lib/CPython/Protocols/Number.chs" #-}
inPlaceXor :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
inPlaceXor a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
inPlaceXor'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 285 "lib/CPython/Protocols/Number.chs" #-}
inPlaceOr :: (Number a, Number b) => (a) -> (b) -> IO ((SomeNumber))
inPlaceOr a1 a2 =
withObject a1 $ \a1' ->
withObject a2 $ \a2' ->
inPlaceOr'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 291 "lib/CPython/Protocols/Number.chs" #-}
toInteger :: Number a => (a) -> IO ((Integer))
toInteger a1 =
withObject a1 $ \a1' ->
toInteger'_ a1' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 296 "lib/CPython/Protocols/Number.chs" #-}
toFloat :: Number a => (a) -> IO ((Float))
toFloat a1 =
withObject a1 $ \a1' ->
toFloat'_ a1' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 301 "lib/CPython/Protocols/Number.chs" #-}
toBase :: Number a => (a) -> (Prelude.Integer) -> IO ((Unicode))
toBase a1 a2 =
withObject a1 $ \a1' ->
let {a2' = fromIntegral a2} in
toBase'_ a1' a2' >>= \res ->
stealObject res >>= \res' ->
return (res')
{-# LINE 307 "lib/CPython/Protocols/Number.chs" #-}
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Check"
pyNumberCheck :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Add"
c_add'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Subtract"
subtract'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Multiply"
multiply'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_FloorDivide"
floorDivide'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_TrueDivide"
trueDivide'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Remainder"
remainder'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Divmod"
divmod'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Power"
pyNumberPower :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ())))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Negative"
negative'_ :: ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ())))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Positive"
positive'_ :: ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ())))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Absolute"
absolute'_ :: ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ())))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Invert"
invert'_ :: ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ())))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Lshift"
shiftL'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Rshift"
shiftR'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_And"
and'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Xor"
xor'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Or"
or'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_InPlaceAdd"
inPlaceAdd'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_InPlaceSubtract"
inPlaceSubtract'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_InPlaceMultiply"
inPlaceMultiply'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_InPlaceFloorDivide"
inPlaceFloorDivide'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_InPlaceTrueDivide"
inPlaceTrueDivide'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_InPlaceRemainder"
inPlaceRemainder'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_InPlacePower"
pyNumberInPlacePower :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ())))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_InPlaceLshift"
inPlaceShiftL'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_InPlaceRshift"
inPlaceShiftR'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_InPlaceAnd"
inPlaceAnd'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_InPlaceXor"
inPlaceXor'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_InPlaceOr"
inPlaceOr'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ()))))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Long"
toInteger'_ :: ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ())))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_Float"
toFloat'_ :: ((C2HSImp.Ptr ()) -> (IO (C2HSImp.Ptr ())))
foreign import ccall safe "CPython/Protocols/Number.chs.h PyNumber_ToBase"
toBase'_ :: ((C2HSImp.Ptr ()) -> (C2HSImp.CInt -> (IO (C2HSImp.Ptr ()))))