inline-java-0.10.0: src/common/Language/Java/Inline/Internal/QQMarker.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-redundant-constraints #-}
module Language.Java.Inline.Internal.QQMarker where
import Data.Proxy
import GHC.Stack (HasCallStack, withFrozenCallStack)
import GHC.TypeLits (Nat, Symbol)
import Language.Java
-- | A function to indicate to the plugin the occurrence
-- of java quasiquotations
qqMarker
:: forall
k
(args_tys :: k) -- JType's of arguments
tyres -- JType of result
(input :: Symbol) -- input string of the quasiquoter
(mname :: Symbol) -- name of the method to generate
(antiqs :: Symbol) -- antiquoted variables as a comma-separated list
(line :: Nat) -- line number of the quasiquotation
args_tuple -- uncoerced argument types
b -- uncoerced result type
m.
( tyres ~ Ty b
, Coercibles args_tuple args_tys
, Coercible b
, HasCallStack
)
=> Proxy input
-> Proxy mname
-> Proxy antiqs
-> Proxy line
-> args_tuple
-> Proxy args_tys
-> (args_tuple -> m b)
-> m b
qqMarker = withFrozenCallStack $
error
"A quasiquotation marker was not removed. Please, report this as a bug."
class Coercibles xs (tys :: k) | xs -> tys
instance Coercibles () ()
instance (ty ~ Ty x, Coercible x, Coercibles xs tys)
=> Coercibles (x, xs) '(ty, tys)