module Vulkan.Utils.Internal where
import Control.Monad.IO.Class
import GHC.IO ( throwIO )
import GHC.IO.Exception ( IOErrorType(..)
, IOException(..)
)
import System.IO ( hPutStrLn
, stderr
)
import Language.Haskell.TH.Quote
unsatisfiedConstraints :: String -> IO a
unsatisfiedConstraints :: forall a. String -> IO a
unsatisfiedConstraints String
message =
IOException -> IO a
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO a) -> IOException -> IO a
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
UnsatisfiedConstraints String
"" String
message Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
noSuchThing :: String -> IO a
noSuchThing :: forall a. String -> IO a
noSuchThing String
message =
IOException -> IO a
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO a) -> IOException -> IO a
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
NoSuchThing String
"" String
message Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
sayErr :: MonadIO m => String -> m ()
sayErr :: forall (m :: * -> *). MonadIO m => String -> m ()
sayErr = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> (String -> IO ()) -> String -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Handle -> String -> IO ()
hPutStrLn Handle
stderr
badQQ :: String -> QuasiQuoter
badQQ :: String -> QuasiQuoter
badQQ String
name = (String -> Q Exp)
-> (String -> Q Pat)
-> (String -> Q Type)
-> (String -> Q [Dec])
-> QuasiQuoter
QuasiQuoter (String -> String -> Q Exp
forall a. String -> a
bad String
"expression")
(String -> String -> Q Pat
forall a. String -> a
bad String
"pattern")
(String -> String -> Q Type
forall a. String -> a
bad String
"type")
(String -> String -> Q [Dec]
forall a. String -> a
bad String
"declaration")
where
bad :: String -> a
bad :: forall a. String -> a
bad String
context =
String -> a
forall a. HasCallStack => String -> a
error (String -> a) -> String -> a
forall a b. (a -> b) -> a -> b
$ String
"Can't use " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
name String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" quote in a " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
context String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" context"