-- GENERATED by C->Haskell Compiler, version 0.28.8 Switcheroo, 25 November 2017 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "src/Foreign/CUDA/Runtime/Error.chs" #-}
{-# LANGUAGE BangPatterns             #-}
{-# LANGUAGE DeriveDataTypeable       #-}
{-# LANGUAGE ForeignFunctionInterface #-}
--------------------------------------------------------------------------------
-- |
-- Module    : Foreign.CUDA.Runtime.Error
-- Copyright : [2009..2023] Trevor L. McDonell
-- License   : BSD
--
-- Error handling functions
--
--------------------------------------------------------------------------------

module Foreign.CUDA.Runtime.Error (

  Status(..), CUDAException(..),

  cudaError, describe, requireSDK,
  resultIfOk, nothingIfOk, checkStatus,

) where
import qualified Foreign.C.String as C2HSImp
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import qualified System.IO.Unsafe as C2HSImp



-- Friends
import Foreign.CUDA.Internal.C2HS
import Text.Show.Describe

-- System
import Control.Exception
import Data.Typeable
import Foreign.C
import Foreign.Ptr
import Language.Haskell.TH
import System.IO.Unsafe
import Text.Printf



{-# LINE 37 "src/Foreign/CUDA/Runtime/Error.chs" #-}



--------------------------------------------------------------------------------
-- Return Status
--------------------------------------------------------------------------------

-- |
-- Return codes from API functions
--
data Status = Success
            | InvalidValue
            | MemoryAllocation
            | InitializationError
            | CudartUnloading
            | ProfilerDisabled
            | ProfilerNotInitialized
            | ProfilerAlreadyStarted
            | ProfilerAlreadyStopped
            | InvalidConfiguration
            | InvalidPitchValue
            | InvalidSymbol
            | InvalidHostPointer
            | InvalidDevicePointer
            | InvalidTexture
            | InvalidTextureBinding
            | InvalidChannelDescriptor
            | InvalidMemcpyDirection
            | AddressOfConstant
            | TextureFetchFailed
            | TextureNotBound
            | SynchronizationError
            | InvalidFilterSetting
            | InvalidNormSetting
            | MixedDeviceExecution
            | NotYetImplemented
            | MemoryValueTooLarge
            | StubLibrary
            | InsufficientDriver
            | CallRequiresNewerDriver
            | InvalidSurface
            | DuplicateVariableName
            | DuplicateTextureName
            | DuplicateSurfaceName
            | DevicesUnavailable
            | IncompatibleDriverContext
            | MissingConfiguration
            | PriorLaunchFailure
            | LaunchMaxDepthExceeded
            | LaunchFileScopedTex
            | LaunchFileScopedSurf
            | SyncDepthExceeded
            | LaunchPendingCountExceeded
            | InvalidDeviceFunction
            | NoDevice
            | InvalidDevice
            | DeviceNotLicensed
            | SoftwareValidityNotEstablished
            | StartupFailure
            | InvalidKernelImage
            | DeviceUninitialized
            | MapBufferObjectFailed
            | UnmapBufferObjectFailed
            | ArrayIsMapped
            | AlreadyMapped
            | NoKernelImageForDevice
            | AlreadyAcquired
            | NotMapped
            | NotMappedAsArray
            | NotMappedAsPointer
            | ECCUncorrectable
            | UnsupportedLimit
            | DeviceAlreadyInUse
            | PeerAccessUnsupported
            | InvalidPtx
            | InvalidGraphicsContext
            | NvlinkUncorrectable
            | JitCompilerNotFound
            | UnsupportedPtxVersion
            | JitCompilationDisabled
            | UnsupportedExecAffinity
            | InvalidSource
            | FileNotFound
            | SharedObjectSymbolNotFound
            | SharedObjectInitFailed
            | OperatingSystem
            | InvalidResourceHandle
            | IllegalState
            | SymbolNotFound
            | NotReady
            | IllegalAddress
            | LaunchOutOfResources
            | LaunchTimeout
            | LaunchIncompatibleTexturing
            | PeerAccessAlreadyEnabled
            | PeerAccessNotEnabled
            | SetOnActiveProcess
            | ContextIsDestroyed
            | Assert
            | TooManyPeers
            | HostMemoryAlreadyRegistered
            | HostMemoryNotRegistered
            | HardwareStackError
            | IllegalInstruction
            | MisalignedAddress
            | InvalidAddressSpace
            | InvalidPc
            | LaunchFailure
            | CooperativeLaunchTooLarge
            | NotPermitted
            | NotSupported
            | SystemNotReady
            | SystemDriverMismatch
            | CompatNotSupportedOnDevice
            | MpsConnectionFailed
            | MpsRpcFailure
            | MpsServerNotReady
            | MpsMaxClientsReached
            | MpsMaxConnectionsReached
            | MpsClientTerminated
            | StreamCaptureUnsupported
            | StreamCaptureInvalidated
            | StreamCaptureMerge
            | StreamCaptureUnmatched
            | StreamCaptureUnjoined
            | StreamCaptureIsolation
            | StreamCaptureImplicit
            | CapturedEvent
            | StreamCaptureWrongThread
            | Timeout
            | GraphExecUpdateFailure
            | ExternalDevice
            | InvalidClusterSize
            | Unknown
            | ApiFailureBase
  deriving (Status -> Status -> Bool
(Status -> Status -> Bool)
-> (Status -> Status -> Bool) -> Eq Status
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Status -> Status -> Bool
== :: Status -> Status -> Bool
$c/= :: Status -> Status -> Bool
/= :: Status -> Status -> Bool
Eq,Int -> Status -> ShowS
[Status] -> ShowS
Status -> String
(Int -> Status -> ShowS)
-> (Status -> String) -> ([Status] -> ShowS) -> Show Status
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Status -> ShowS
showsPrec :: Int -> Status -> ShowS
$cshow :: Status -> String
show :: Status -> String
$cshowList :: [Status] -> ShowS
showList :: [Status] -> ShowS
Show)
instance Enum Status where
  succ :: Status -> Status
succ Status
Success = Status
InvalidValue
  succ Status
InvalidValue = Status
MemoryAllocation
  succ Status
MemoryAllocation = Status
InitializationError
  succ Status
InitializationError = Status
CudartUnloading
  succ Status
CudartUnloading = Status
ProfilerDisabled
  succ Status
ProfilerDisabled = Status
ProfilerNotInitialized
  succ Status
ProfilerNotInitialized = Status
ProfilerAlreadyStarted
  succ Status
ProfilerAlreadyStarted = Status
ProfilerAlreadyStopped
  succ Status
ProfilerAlreadyStopped = Status
InvalidConfiguration
  succ Status
InvalidConfiguration = Status
InvalidPitchValue
  succ Status
InvalidPitchValue = Status
InvalidSymbol
  succ Status
InvalidSymbol = Status
InvalidHostPointer
  succ Status
InvalidHostPointer = Status
InvalidDevicePointer
  succ Status
InvalidDevicePointer = Status
InvalidTexture
  succ Status
InvalidTexture = Status
InvalidTextureBinding
  succ Status
InvalidTextureBinding = Status
InvalidChannelDescriptor
  succ Status
InvalidChannelDescriptor = Status
InvalidMemcpyDirection
  succ Status
InvalidMemcpyDirection = Status
AddressOfConstant
  succ Status
AddressOfConstant = Status
TextureFetchFailed
  succ Status
TextureFetchFailed = Status
TextureNotBound
  succ Status
TextureNotBound = Status
SynchronizationError
  succ Status
SynchronizationError = Status
InvalidFilterSetting
  succ Status
InvalidFilterSetting = Status
InvalidNormSetting
  succ Status
InvalidNormSetting = Status
MixedDeviceExecution
  succ Status
MixedDeviceExecution = Status
NotYetImplemented
  succ Status
NotYetImplemented = Status
MemoryValueTooLarge
  succ Status
MemoryValueTooLarge = Status
StubLibrary
  succ Status
StubLibrary = Status
InsufficientDriver
  succ Status
InsufficientDriver = Status
CallRequiresNewerDriver
  succ Status
CallRequiresNewerDriver = Status
InvalidSurface
  succ Status
InvalidSurface = Status
DuplicateVariableName
  succ Status
DuplicateVariableName = Status
DuplicateTextureName
  succ Status
DuplicateTextureName = Status
DuplicateSurfaceName
  succ Status
DuplicateSurfaceName = Status
DevicesUnavailable
  succ Status
DevicesUnavailable = Status
IncompatibleDriverContext
  succ Status
IncompatibleDriverContext = Status
MissingConfiguration
  succ Status
MissingConfiguration = Status
PriorLaunchFailure
  succ Status
PriorLaunchFailure = Status
LaunchMaxDepthExceeded
  succ Status
LaunchMaxDepthExceeded = Status
LaunchFileScopedTex
  succ Status
LaunchFileScopedTex = Status
LaunchFileScopedSurf
  succ Status
LaunchFileScopedSurf = Status
SyncDepthExceeded
  succ Status
SyncDepthExceeded = Status
LaunchPendingCountExceeded
  succ Status
LaunchPendingCountExceeded = Status
InvalidDeviceFunction
  succ Status
InvalidDeviceFunction = Status
NoDevice
  succ Status
NoDevice = Status
InvalidDevice
  succ Status
InvalidDevice = Status
DeviceNotLicensed
  succ Status
DeviceNotLicensed = Status
SoftwareValidityNotEstablished
  succ Status
SoftwareValidityNotEstablished = Status
StartupFailure
  succ Status
StartupFailure = Status
InvalidKernelImage
  succ Status
InvalidKernelImage = Status
DeviceUninitialized
  succ Status
DeviceUninitialized = Status
MapBufferObjectFailed
  succ Status
MapBufferObjectFailed = Status
UnmapBufferObjectFailed
  succ Status
UnmapBufferObjectFailed = Status
ArrayIsMapped
  succ Status
ArrayIsMapped = Status
AlreadyMapped
  succ Status
AlreadyMapped = Status
NoKernelImageForDevice
  succ Status
NoKernelImageForDevice = Status
AlreadyAcquired
  succ Status
AlreadyAcquired = Status
NotMapped
  succ Status
NotMapped = Status
NotMappedAsArray
  succ Status
NotMappedAsArray = Status
NotMappedAsPointer
  succ Status
NotMappedAsPointer = Status
ECCUncorrectable
  succ Status
ECCUncorrectable = Status
UnsupportedLimit
  succ Status
UnsupportedLimit = Status
DeviceAlreadyInUse
  succ Status
DeviceAlreadyInUse = Status
PeerAccessUnsupported
  succ Status
PeerAccessUnsupported = Status
InvalidPtx
  succ Status
InvalidPtx = Status
InvalidGraphicsContext
  succ Status
InvalidGraphicsContext = Status
NvlinkUncorrectable
  succ Status
NvlinkUncorrectable = Status
JitCompilerNotFound
  succ Status
JitCompilerNotFound = Status
UnsupportedPtxVersion
  succ Status
UnsupportedPtxVersion = Status
JitCompilationDisabled
  succ Status
JitCompilationDisabled = Status
UnsupportedExecAffinity
  succ Status
UnsupportedExecAffinity = Status
InvalidSource
  succ Status
InvalidSource = Status
FileNotFound
  succ Status
FileNotFound = Status
SharedObjectSymbolNotFound
  succ Status
SharedObjectSymbolNotFound = Status
SharedObjectInitFailed
  succ Status
SharedObjectInitFailed = Status
OperatingSystem
  succ Status
OperatingSystem = Status
InvalidResourceHandle
  succ Status
InvalidResourceHandle = Status
IllegalState
  succ Status
IllegalState = Status
SymbolNotFound
  succ Status
SymbolNotFound = Status
NotReady
  succ Status
NotReady = Status
IllegalAddress
  succ Status
IllegalAddress = Status
LaunchOutOfResources
  succ Status
LaunchOutOfResources = Status
LaunchTimeout
  succ Status
LaunchTimeout = Status
LaunchIncompatibleTexturing
  succ Status
LaunchIncompatibleTexturing = Status
PeerAccessAlreadyEnabled
  succ Status
PeerAccessAlreadyEnabled = Status
PeerAccessNotEnabled
  succ Status
PeerAccessNotEnabled = Status
SetOnActiveProcess
  succ Status
SetOnActiveProcess = Status
ContextIsDestroyed
  succ Status
ContextIsDestroyed = Status
Assert
  succ Status
Assert = Status
TooManyPeers
  succ Status
TooManyPeers = Status
HostMemoryAlreadyRegistered
  succ Status
HostMemoryAlreadyRegistered = Status
HostMemoryNotRegistered
  succ Status
HostMemoryNotRegistered = Status
HardwareStackError
  succ Status
HardwareStackError = Status
IllegalInstruction
  succ Status
IllegalInstruction = Status
MisalignedAddress
  succ Status
MisalignedAddress = Status
InvalidAddressSpace
  succ Status
InvalidAddressSpace = Status
InvalidPc
  succ Status
InvalidPc = Status
LaunchFailure
  succ Status
LaunchFailure = Status
CooperativeLaunchTooLarge
  succ Status
CooperativeLaunchTooLarge = Status
NotPermitted
  succ Status
NotPermitted = Status
NotSupported
  succ Status
NotSupported = Status
SystemNotReady
  succ Status
SystemNotReady = Status
SystemDriverMismatch
  succ Status
SystemDriverMismatch = Status
CompatNotSupportedOnDevice
  succ Status
CompatNotSupportedOnDevice = Status
MpsConnectionFailed
  succ Status
MpsConnectionFailed = Status
MpsRpcFailure
  succ Status
MpsRpcFailure = Status
MpsServerNotReady
  succ Status
MpsServerNotReady = Status
MpsMaxClientsReached
  succ Status
MpsMaxClientsReached = Status
MpsMaxConnectionsReached
  succ Status
MpsMaxConnectionsReached = Status
MpsClientTerminated
  succ Status
MpsClientTerminated = Status
StreamCaptureUnsupported
  succ Status
StreamCaptureUnsupported = Status
StreamCaptureInvalidated
  succ Status
StreamCaptureInvalidated = Status
StreamCaptureMerge
  succ Status
StreamCaptureMerge = Status
StreamCaptureUnmatched
  succ Status
StreamCaptureUnmatched = Status
StreamCaptureUnjoined
  succ Status
StreamCaptureUnjoined = Status
StreamCaptureIsolation
  succ Status
StreamCaptureIsolation = Status
StreamCaptureImplicit
  succ Status
StreamCaptureImplicit = Status
CapturedEvent
  succ Status
CapturedEvent = Status
StreamCaptureWrongThread
  succ Status
StreamCaptureWrongThread = Status
Timeout
  succ Status
Timeout = Status
GraphExecUpdateFailure
  succ Status
GraphExecUpdateFailure = Status
ExternalDevice
  succ Status
ExternalDevice = Status
InvalidClusterSize
  succ Status
InvalidClusterSize = Status
Unknown
  succ Status
Unknown = Status
ApiFailureBase
  succ Status
ApiFailureBase = String -> Status
forall a. HasCallStack => String -> a
error String
"Status.succ: ApiFailureBase has no successor"

  pred :: Status -> Status
pred Status
InvalidValue = Status
Success
  pred Status
MemoryAllocation = Status
InvalidValue
  pred Status
InitializationError = Status
MemoryAllocation
  pred Status
CudartUnloading = Status
InitializationError
  pred Status
ProfilerDisabled = Status
CudartUnloading
  pred Status
ProfilerNotInitialized = Status
ProfilerDisabled
  pred Status
ProfilerAlreadyStarted = Status
ProfilerNotInitialized
  pred Status
ProfilerAlreadyStopped = Status
ProfilerAlreadyStarted
  pred Status
InvalidConfiguration = Status
ProfilerAlreadyStopped
  pred Status
InvalidPitchValue = Status
InvalidConfiguration
  pred Status
InvalidSymbol = Status
InvalidPitchValue
  pred Status
InvalidHostPointer = Status
InvalidSymbol
  pred Status
InvalidDevicePointer = Status
InvalidHostPointer
  pred Status
InvalidTexture = Status
InvalidDevicePointer
  pred Status
InvalidTextureBinding = Status
InvalidTexture
  pred Status
InvalidChannelDescriptor = Status
InvalidTextureBinding
  pred Status
InvalidMemcpyDirection = Status
InvalidChannelDescriptor
  pred Status
AddressOfConstant = Status
InvalidMemcpyDirection
  pred Status
TextureFetchFailed = Status
AddressOfConstant
  pred Status
TextureNotBound = Status
TextureFetchFailed
  pred Status
SynchronizationError = Status
TextureNotBound
  pred Status
InvalidFilterSetting = Status
SynchronizationError
  pred Status
InvalidNormSetting = Status
InvalidFilterSetting
  pred Status
MixedDeviceExecution = Status
InvalidNormSetting
  pred Status
NotYetImplemented = Status
MixedDeviceExecution
  pred Status
MemoryValueTooLarge = Status
NotYetImplemented
  pred Status
StubLibrary = Status
MemoryValueTooLarge
  pred Status
InsufficientDriver = Status
StubLibrary
  pred Status
CallRequiresNewerDriver = Status
InsufficientDriver
  pred Status
InvalidSurface = Status
CallRequiresNewerDriver
  pred Status
DuplicateVariableName = Status
InvalidSurface
  pred Status
DuplicateTextureName = Status
DuplicateVariableName
  pred Status
DuplicateSurfaceName = Status
DuplicateTextureName
  pred Status
DevicesUnavailable = Status
DuplicateSurfaceName
  pred Status
IncompatibleDriverContext = Status
DevicesUnavailable
  pred Status
MissingConfiguration = Status
IncompatibleDriverContext
  pred Status
PriorLaunchFailure = Status
MissingConfiguration
  pred Status
LaunchMaxDepthExceeded = Status
PriorLaunchFailure
  pred Status
LaunchFileScopedTex = Status
LaunchMaxDepthExceeded
  pred Status
LaunchFileScopedSurf = Status
LaunchFileScopedTex
  pred Status
SyncDepthExceeded = Status
LaunchFileScopedSurf
  pred Status
LaunchPendingCountExceeded = Status
SyncDepthExceeded
  pred Status
InvalidDeviceFunction = Status
LaunchPendingCountExceeded
  pred Status
NoDevice = Status
InvalidDeviceFunction
  pred Status
InvalidDevice = Status
NoDevice
  pred Status
DeviceNotLicensed = Status
InvalidDevice
  pred Status
SoftwareValidityNotEstablished = Status
DeviceNotLicensed
  pred Status
StartupFailure = Status
SoftwareValidityNotEstablished
  pred Status
InvalidKernelImage = Status
StartupFailure
  pred Status
DeviceUninitialized = Status
InvalidKernelImage
  pred Status
MapBufferObjectFailed = Status
DeviceUninitialized
  pred Status
UnmapBufferObjectFailed = Status
MapBufferObjectFailed
  pred Status
ArrayIsMapped = Status
UnmapBufferObjectFailed
  pred Status
AlreadyMapped = Status
ArrayIsMapped
  pred Status
NoKernelImageForDevice = Status
AlreadyMapped
  pred Status
AlreadyAcquired = Status
NoKernelImageForDevice
  pred Status
NotMapped = Status
AlreadyAcquired
  pred Status
NotMappedAsArray = Status
NotMapped
  pred Status
NotMappedAsPointer = Status
NotMappedAsArray
  pred Status
ECCUncorrectable = Status
NotMappedAsPointer
  pred Status
UnsupportedLimit = Status
ECCUncorrectable
  pred Status
DeviceAlreadyInUse = Status
UnsupportedLimit
  pred Status
PeerAccessUnsupported = Status
DeviceAlreadyInUse
  pred Status
InvalidPtx = Status
PeerAccessUnsupported
  pred Status
InvalidGraphicsContext = Status
InvalidPtx
  pred Status
NvlinkUncorrectable = Status
InvalidGraphicsContext
  pred Status
JitCompilerNotFound = Status
NvlinkUncorrectable
  pred Status
UnsupportedPtxVersion = Status
JitCompilerNotFound
  pred Status
JitCompilationDisabled = Status
UnsupportedPtxVersion
  pred Status
UnsupportedExecAffinity = Status
JitCompilationDisabled
  pred Status
InvalidSource = Status
UnsupportedExecAffinity
  pred Status
FileNotFound = Status
InvalidSource
  pred Status
SharedObjectSymbolNotFound = Status
FileNotFound
  pred Status
SharedObjectInitFailed = Status
SharedObjectSymbolNotFound
  pred Status
OperatingSystem = Status
SharedObjectInitFailed
  pred Status
InvalidResourceHandle = Status
OperatingSystem
  pred Status
IllegalState = Status
InvalidResourceHandle
  pred Status
SymbolNotFound = Status
IllegalState
  pred Status
NotReady = Status
SymbolNotFound
  pred Status
IllegalAddress = Status
NotReady
  pred Status
LaunchOutOfResources = Status
IllegalAddress
  pred Status
LaunchTimeout = Status
LaunchOutOfResources
  pred Status
LaunchIncompatibleTexturing = Status
LaunchTimeout
  pred Status
PeerAccessAlreadyEnabled = Status
LaunchIncompatibleTexturing
  pred Status
PeerAccessNotEnabled = Status
PeerAccessAlreadyEnabled
  pred Status
SetOnActiveProcess = Status
PeerAccessNotEnabled
  pred Status
ContextIsDestroyed = Status
SetOnActiveProcess
  pred Status
Assert = Status
ContextIsDestroyed
  pred Status
TooManyPeers = Status
Assert
  pred Status
HostMemoryAlreadyRegistered = Status
TooManyPeers
  pred Status
HostMemoryNotRegistered = Status
HostMemoryAlreadyRegistered
  pred Status
HardwareStackError = Status
HostMemoryNotRegistered
  pred Status
IllegalInstruction = Status
HardwareStackError
  pred Status
MisalignedAddress = Status
IllegalInstruction
  pred Status
InvalidAddressSpace = Status
MisalignedAddress
  pred Status
InvalidPc = Status
InvalidAddressSpace
  pred Status
LaunchFailure = Status
InvalidPc
  pred Status
CooperativeLaunchTooLarge = Status
LaunchFailure
  pred Status
NotPermitted = Status
CooperativeLaunchTooLarge
  pred Status
NotSupported = Status
NotPermitted
  pred Status
SystemNotReady = Status
NotSupported
  pred Status
SystemDriverMismatch = Status
SystemNotReady
  pred Status
CompatNotSupportedOnDevice = Status
SystemDriverMismatch
  pred Status
MpsConnectionFailed = Status
CompatNotSupportedOnDevice
  pred Status
MpsRpcFailure = Status
MpsConnectionFailed
  pred Status
MpsServerNotReady = Status
MpsRpcFailure
  pred Status
MpsMaxClientsReached = Status
MpsServerNotReady
  pred Status
MpsMaxConnectionsReached = Status
MpsMaxClientsReached
  pred Status
MpsClientTerminated = Status
MpsMaxConnectionsReached
  pred Status
StreamCaptureUnsupported = Status
MpsClientTerminated
  pred Status
StreamCaptureInvalidated = Status
StreamCaptureUnsupported
  pred Status
StreamCaptureMerge = Status
StreamCaptureInvalidated
  pred Status
StreamCaptureUnmatched = Status
StreamCaptureMerge
  pred Status
StreamCaptureUnjoined = Status
StreamCaptureUnmatched
  pred Status
StreamCaptureIsolation = Status
StreamCaptureUnjoined
  pred Status
StreamCaptureImplicit = Status
StreamCaptureIsolation
  pred Status
CapturedEvent = Status
StreamCaptureImplicit
  pred Status
StreamCaptureWrongThread = Status
CapturedEvent
  pred Status
Timeout = Status
StreamCaptureWrongThread
  pred Status
GraphExecUpdateFailure = Status
Timeout
  pred Status
ExternalDevice = Status
GraphExecUpdateFailure
  pred Status
InvalidClusterSize = Status
ExternalDevice
  pred Status
Unknown = Status
InvalidClusterSize
  pred Status
ApiFailureBase = Status
Unknown
  pred Status
Success = String -> Status
forall a. HasCallStack => String -> a
error String
"Status.pred: Success has no predecessor"

  enumFromTo :: Status -> Status -> [Status]
enumFromTo Status
from Status
to = Status -> [Status]
forall {t}. Enum t => t -> [t]
go Status
from
    where
      end :: Int
end = Status -> Int
forall a. Enum a => a -> Int
fromEnum Status
to
      go :: t -> [t]
go t
v = case Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (t -> Int
forall a. Enum a => a -> Int
fromEnum t
v) Int
end of
                 Ordering
LT -> t
v t -> [t] -> [t]
forall a. a -> [a] -> [a]
: t -> [t]
go (t -> t
forall a. Enum a => a -> a
succ t
v)
                 Ordering
EQ -> [t
v]
                 Ordering
GT -> []

  enumFrom :: Status -> [Status]
enumFrom Status
from = Status -> Status -> [Status]
forall a. Enum a => a -> a -> [a]
enumFromTo Status
from Status
ApiFailureBase

  fromEnum :: Status -> Int
fromEnum Status
Success = Int
0
  fromEnum Status
InvalidValue = Int
1
  fromEnum Status
MemoryAllocation = Int
2
  fromEnum Status
InitializationError = Int
3
  fromEnum Status
CudartUnloading = Int
4
  fromEnum Status
ProfilerDisabled = Int
5
  fromEnum Status
ProfilerNotInitialized = Int
6
  fromEnum Status
ProfilerAlreadyStarted = Int
7
  fromEnum Status
ProfilerAlreadyStopped = Int
8
  fromEnum Status
InvalidConfiguration = Int
9
  fromEnum Status
InvalidPitchValue = Int
12
  fromEnum Status
InvalidSymbol = Int
13
  fromEnum Status
InvalidHostPointer = Int
16
  fromEnum Status
InvalidDevicePointer = Int
17
  fromEnum Status
InvalidTexture = Int
18
  fromEnum Status
InvalidTextureBinding = Int
19
  fromEnum Status
InvalidChannelDescriptor = Int
20
  fromEnum Status
InvalidMemcpyDirection = Int
21
  fromEnum Status
AddressOfConstant = Int
22
  fromEnum Status
TextureFetchFailed = Int
23
  fromEnum Status
TextureNotBound = Int
24
  fromEnum Status
SynchronizationError = Int
25
  fromEnum Status
InvalidFilterSetting = Int
26
  fromEnum Status
InvalidNormSetting = Int
27
  fromEnum Status
MixedDeviceExecution = Int
28
  fromEnum Status
NotYetImplemented = Int
31
  fromEnum Status
MemoryValueTooLarge = Int
32
  fromEnum Status
StubLibrary = Int
34
  fromEnum Status
InsufficientDriver = Int
35
  fromEnum Status
CallRequiresNewerDriver = Int
36
  fromEnum Status
InvalidSurface = Int
37
  fromEnum Status
DuplicateVariableName = Int
43
  fromEnum Status
DuplicateTextureName = Int
44
  fromEnum Status
DuplicateSurfaceName = Int
45
  fromEnum Status
DevicesUnavailable = Int
46
  fromEnum Status
IncompatibleDriverContext = Int
49
  fromEnum Status
MissingConfiguration = Int
52
  fromEnum Status
PriorLaunchFailure = Int
53
  fromEnum Status
LaunchMaxDepthExceeded = Int
65
  fromEnum Status
LaunchFileScopedTex = Int
66
  fromEnum Status
LaunchFileScopedSurf = Int
67
  fromEnum Status
SyncDepthExceeded = Int
68
  fromEnum Status
LaunchPendingCountExceeded = Int
69
  fromEnum Status
InvalidDeviceFunction = Int
98
  fromEnum Status
NoDevice = Int
100
  fromEnum Status
InvalidDevice = Int
101
  fromEnum Status
DeviceNotLicensed = Int
102
  fromEnum Status
SoftwareValidityNotEstablished = Int
103
  fromEnum Status
StartupFailure = Int
127
  fromEnum Status
InvalidKernelImage = Int
200
  fromEnum Status
DeviceUninitialized = Int
201
  fromEnum Status
MapBufferObjectFailed = Int
205
  fromEnum Status
UnmapBufferObjectFailed = Int
206
  fromEnum Status
ArrayIsMapped = Int
207
  fromEnum Status
AlreadyMapped = Int
208
  fromEnum Status
NoKernelImageForDevice = Int
209
  fromEnum Status
AlreadyAcquired = Int
210
  fromEnum Status
NotMapped = Int
211
  fromEnum Status
NotMappedAsArray = Int
212
  fromEnum Status
NotMappedAsPointer = Int
213
  fromEnum Status
ECCUncorrectable = Int
214
  fromEnum Status
UnsupportedLimit = Int
215
  fromEnum Status
DeviceAlreadyInUse = Int
216
  fromEnum Status
PeerAccessUnsupported = Int
217
  fromEnum Status
InvalidPtx = Int
218
  fromEnum Status
InvalidGraphicsContext = Int
219
  fromEnum Status
NvlinkUncorrectable = Int
220
  fromEnum Status
JitCompilerNotFound = Int
221
  fromEnum Status
UnsupportedPtxVersion = Int
222
  fromEnum Status
JitCompilationDisabled = Int
223
  fromEnum Status
UnsupportedExecAffinity = Int
224
  fromEnum Status
InvalidSource = Int
300
  fromEnum Status
FileNotFound = Int
301
  fromEnum Status
SharedObjectSymbolNotFound = Int
302
  fromEnum Status
SharedObjectInitFailed = Int
303
  fromEnum Status
OperatingSystem = Int
304
  fromEnum Status
InvalidResourceHandle = Int
400
  fromEnum Status
IllegalState = Int
401
  fromEnum Status
SymbolNotFound = Int
500
  fromEnum Status
NotReady = Int
600
  fromEnum Status
IllegalAddress = Int
700
  fromEnum Status
LaunchOutOfResources = Int
701
  fromEnum Status
LaunchTimeout = Int
702
  fromEnum Status
LaunchIncompatibleTexturing = Int
703
  fromEnum Status
PeerAccessAlreadyEnabled = Int
704
  fromEnum Status
PeerAccessNotEnabled = Int
705
  fromEnum Status
SetOnActiveProcess = Int
708
  fromEnum Status
ContextIsDestroyed = Int
709
  fromEnum Status
Assert = Int
710
  fromEnum Status
TooManyPeers = Int
711
  fromEnum Status
HostMemoryAlreadyRegistered = Int
712
  fromEnum Status
HostMemoryNotRegistered = Int
713
  fromEnum Status
HardwareStackError = Int
714
  fromEnum Status
IllegalInstruction = Int
715
  fromEnum Status
MisalignedAddress = Int
716
  fromEnum Status
InvalidAddressSpace = Int
717
  fromEnum Status
InvalidPc = Int
718
  fromEnum Status
LaunchFailure = Int
719
  fromEnum Status
CooperativeLaunchTooLarge = Int
720
  fromEnum Status
NotPermitted = Int
800
  fromEnum Status
NotSupported = Int
801
  fromEnum Status
SystemNotReady = Int
802
  fromEnum Status
SystemDriverMismatch = Int
803
  fromEnum Status
CompatNotSupportedOnDevice = Int
804
  fromEnum Status
MpsConnectionFailed = Int
805
  fromEnum Status
MpsRpcFailure = Int
806
  fromEnum Status
MpsServerNotReady = Int
807
  fromEnum Status
MpsMaxClientsReached = Int
808
  fromEnum Status
MpsMaxConnectionsReached = Int
809
  fromEnum Status
MpsClientTerminated = Int
810
  fromEnum Status
StreamCaptureUnsupported = Int
900
  fromEnum Status
StreamCaptureInvalidated = Int
901
  fromEnum Status
StreamCaptureMerge = Int
902
  fromEnum Status
StreamCaptureUnmatched = Int
903
  fromEnum Status
StreamCaptureUnjoined = Int
904
  fromEnum Status
StreamCaptureIsolation = Int
905
  fromEnum Status
StreamCaptureImplicit = Int
906
  fromEnum Status
CapturedEvent = Int
907
  fromEnum Status
StreamCaptureWrongThread = Int
908
  fromEnum Status
Timeout = Int
909
  fromEnum Status
GraphExecUpdateFailure = Int
910
  fromEnum Status
ExternalDevice = Int
911
  fromEnum Status
InvalidClusterSize = Int
912
  fromEnum Status
Unknown = Int
999
  fromEnum Status
ApiFailureBase = Int
10000

  toEnum :: Int -> Status
toEnum Int
0 = Status
Success
  toEnum Int
1 = Status
InvalidValue
  toEnum Int
2 = Status
MemoryAllocation
  toEnum Int
3 = Status
InitializationError
  toEnum Int
4 = Status
CudartUnloading
  toEnum Int
5 = Status
ProfilerDisabled
  toEnum Int
6 = Status
ProfilerNotInitialized
  toEnum Int
7 = Status
ProfilerAlreadyStarted
  toEnum Int
8 = Status
ProfilerAlreadyStopped
  toEnum Int
9 = Status
InvalidConfiguration
  toEnum Int
12 = Status
InvalidPitchValue
  toEnum Int
13 = Status
InvalidSymbol
  toEnum Int
16 = Status
InvalidHostPointer
  toEnum Int
17 = Status
InvalidDevicePointer
  toEnum Int
18 = Status
InvalidTexture
  toEnum Int
19 = Status
InvalidTextureBinding
  toEnum Int
20 = Status
InvalidChannelDescriptor
  toEnum Int
21 = Status
InvalidMemcpyDirection
  toEnum Int
22 = Status
AddressOfConstant
  toEnum Int
23 = Status
TextureFetchFailed
  toEnum Int
24 = Status
TextureNotBound
  toEnum Int
25 = Status
SynchronizationError
  toEnum Int
26 = Status
InvalidFilterSetting
  toEnum Int
27 = Status
InvalidNormSetting
  toEnum Int
28 = Status
MixedDeviceExecution
  toEnum Int
31 = Status
NotYetImplemented
  toEnum Int
32 = Status
MemoryValueTooLarge
  toEnum Int
34 = Status
StubLibrary
  toEnum Int
35 = Status
InsufficientDriver
  toEnum Int
36 = Status
CallRequiresNewerDriver
  toEnum Int
37 = Status
InvalidSurface
  toEnum Int
43 = Status
DuplicateVariableName
  toEnum Int
44 = Status
DuplicateTextureName
  toEnum Int
45 = Status
DuplicateSurfaceName
  toEnum Int
46 = Status
DevicesUnavailable
  toEnum Int
49 = Status
IncompatibleDriverContext
  toEnum Int
52 = Status
MissingConfiguration
  toEnum Int
53 = Status
PriorLaunchFailure
  toEnum Int
65 = Status
LaunchMaxDepthExceeded
  toEnum Int
66 = Status
LaunchFileScopedTex
  toEnum Int
67 = Status
LaunchFileScopedSurf
  toEnum Int
68 = Status
SyncDepthExceeded
  toEnum Int
69 = Status
LaunchPendingCountExceeded
  toEnum Int
98 = Status
InvalidDeviceFunction
  toEnum Int
100 = Status
NoDevice
  toEnum Int
101 = Status
InvalidDevice
  toEnum Int
102 = Status
DeviceNotLicensed
  toEnum Int
103 = Status
SoftwareValidityNotEstablished
  toEnum Int
127 = Status
StartupFailure
  toEnum Int
200 = Status
InvalidKernelImage
  toEnum Int
201 = Status
DeviceUninitialized
  toEnum Int
205 = Status
MapBufferObjectFailed
  toEnum Int
206 = Status
UnmapBufferObjectFailed
  toEnum Int
207 = Status
ArrayIsMapped
  toEnum Int
208 = Status
AlreadyMapped
  toEnum Int
209 = Status
NoKernelImageForDevice
  toEnum Int
210 = Status
AlreadyAcquired
  toEnum Int
211 = Status
NotMapped
  toEnum Int
212 = Status
NotMappedAsArray
  toEnum Int
213 = Status
NotMappedAsPointer
  toEnum Int
214 = Status
ECCUncorrectable
  toEnum Int
215 = Status
UnsupportedLimit
  toEnum Int
216 = Status
DeviceAlreadyInUse
  toEnum Int
217 = Status
PeerAccessUnsupported
  toEnum Int
218 = Status
InvalidPtx
  toEnum Int
219 = Status
InvalidGraphicsContext
  toEnum Int
220 = Status
NvlinkUncorrectable
  toEnum Int
221 = Status
JitCompilerNotFound
  toEnum Int
222 = Status
UnsupportedPtxVersion
  toEnum Int
223 = Status
JitCompilationDisabled
  toEnum Int
224 = Status
UnsupportedExecAffinity
  toEnum Int
300 = Status
InvalidSource
  toEnum Int
301 = Status
FileNotFound
  toEnum Int
302 = Status
SharedObjectSymbolNotFound
  toEnum Int
303 = Status
SharedObjectInitFailed
  toEnum Int
304 = Status
OperatingSystem
  toEnum Int
400 = Status
InvalidResourceHandle
  toEnum Int
401 = Status
IllegalState
  toEnum Int
500 = Status
SymbolNotFound
  toEnum Int
600 = Status
NotReady
  toEnum Int
700 = Status
IllegalAddress
  toEnum Int
701 = Status
LaunchOutOfResources
  toEnum Int
702 = Status
LaunchTimeout
  toEnum Int
703 = Status
LaunchIncompatibleTexturing
  toEnum Int
704 = Status
PeerAccessAlreadyEnabled
  toEnum Int
705 = Status
PeerAccessNotEnabled
  toEnum Int
708 = Status
SetOnActiveProcess
  toEnum Int
709 = Status
ContextIsDestroyed
  toEnum Int
710 = Status
Assert
  toEnum Int
711 = Status
TooManyPeers
  toEnum Int
712 = Status
HostMemoryAlreadyRegistered
  toEnum Int
713 = Status
HostMemoryNotRegistered
  toEnum Int
714 = Status
HardwareStackError
  toEnum Int
715 = Status
IllegalInstruction
  toEnum Int
716 = Status
MisalignedAddress
  toEnum Int
717 = Status
InvalidAddressSpace
  toEnum Int
718 = Status
InvalidPc
  toEnum Int
719 = Status
LaunchFailure
  toEnum Int
720 = Status
CooperativeLaunchTooLarge
  toEnum Int
800 = Status
NotPermitted
  toEnum Int
801 = Status
NotSupported
  toEnum Int
802 = Status
SystemNotReady
  toEnum Int
803 = Status
SystemDriverMismatch
  toEnum Int
804 = Status
CompatNotSupportedOnDevice
  toEnum Int
805 = Status
MpsConnectionFailed
  toEnum Int
806 = Status
MpsRpcFailure
  toEnum Int
807 = Status
MpsServerNotReady
  toEnum Int
808 = Status
MpsMaxClientsReached
  toEnum Int
809 = Status
MpsMaxConnectionsReached
  toEnum Int
810 = Status
MpsClientTerminated
  toEnum Int
900 = Status
StreamCaptureUnsupported
  toEnum Int
901 = Status
StreamCaptureInvalidated
  toEnum Int
902 = Status
StreamCaptureMerge
  toEnum Int
903 = Status
StreamCaptureUnmatched
  toEnum Int
904 = Status
StreamCaptureUnjoined
  toEnum Int
905 = Status
StreamCaptureIsolation
  toEnum Int
906 = Status
StreamCaptureImplicit
  toEnum Int
907 = Status
CapturedEvent
  toEnum Int
908 = Status
StreamCaptureWrongThread
  toEnum Int
909 = Status
Timeout
  toEnum Int
910 = Status
GraphExecUpdateFailure
  toEnum Int
911 = Status
ExternalDevice
  toEnum Int
912 = Status
InvalidClusterSize
  toEnum Int
999 = Status
Unknown
  toEnum Int
10000 = Status
ApiFailureBase
  toEnum Int
unmatched = String -> Status
forall a. HasCallStack => String -> a
error (String
"Status.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)

{-# LINE 49 "src/Foreign/CUDA/Runtime/Error.chs" #-}


--------------------------------------------------------------------------------
-- Exceptions
--------------------------------------------------------------------------------

data CUDAException
  = ExitCode  Status
  | UserError String
  deriving Typeable

instance Exception CUDAException

instance Show CUDAException where
  showsPrec _ (ExitCode  s) = showString ("CUDA Exception: " ++ describe s)
  showsPrec _ (UserError s) = showString ("CUDA Exception: " ++ s)


-- |
-- Raise a 'CUDAException' in the IO Monad
--
cudaError :: String -> IO a
cudaError s = throwIO (UserError s)

-- |
-- A specially formatted error message
--
requireSDK :: Name -> Double -> IO a
requireSDK n v = cudaError $ printf "'%s' requires at least cuda-%3.1f\n" (show n) v


--------------------------------------------------------------------------------
-- Helper Functions
--------------------------------------------------------------------------------

-- |
-- Return the descriptive string associated with a particular error code
--
instance Describe Status where
    describe = cudaGetErrorString

-- Logically, this must be a pure function, returning a pointer to a statically
-- defined string constant.
--
cudaGetErrorString :: (Status) -> (String)
cudaGetErrorString a1 =
  C2HSImp.unsafePerformIO $
  let {a1' = cFromEnum a1} in 
  cudaGetErrorString'_ a1' >>= \res ->
  C2HSImp.peekCString res >>= \res' ->
  return (res')

{-# LINE 94 "src/Foreign/CUDA/Runtime/Error.chs" #-}



-- |
-- Return the results of a function on successful execution, otherwise return
-- the error string associated with the return code
--
{-# INLINE resultIfOk #-}
resultIfOk :: (Status, a) -> IO a
resultIfOk (status, !result) =
    case status of
        Success -> return  result
        _       -> throwIO (ExitCode status)


-- |
-- Return the error string associated with an unsuccessful return code,
-- otherwise Nothing
--
{-# INLINE nothingIfOk #-}
nothingIfOk :: Status -> IO ()
nothingIfOk status =
    case status of
        Success -> return  ()
        _       -> throwIO (ExitCode status)

{-# INLINE checkStatus #-}
checkStatus :: CInt -> IO ()
checkStatus = nothingIfOk . cToEnum


foreign import ccall unsafe "Foreign/CUDA/Runtime/Error.chs.h cudaGetErrorString"
  cudaGetErrorString'_ :: (C2HSImp.CInt -> (IO (C2HSImp.Ptr C2HSImp.CChar)))