packages feed

gi-gtk-0.3.18.15: GI/Gtk/Structs/BindingSet.hs


{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (garetxe@gmail.com)

A binding set maintains a list of activatable key bindings.
A single binding set can match multiple types of widgets.
Similar to style contexts, can be matched by any information contained
in a widgets #GtkWidgetPath. When a binding within a set is matched upon
activation, an action signal is emitted on the target widget to carry out
the actual activation.
-}

module GI.Gtk.Structs.BindingSet
    ( 

-- * Exported types
    BindingSet(..)                          ,
    newZeroBindingSet                       ,
    noBindingSet                            ,


 -- * Methods
-- ** bindingSetActivate
    BindingSetActivateMethodInfo            ,
    bindingSetActivate                      ,


-- ** bindingSetAddPath
    BindingSetAddPathMethodInfo             ,
    bindingSetAddPath                       ,


-- ** bindingSetFind
    bindingSetFind                          ,




 -- * Properties
-- ** ClassBranchPspecs
    bindingSetClassBranchPspecs             ,
    bindingSetClearClassBranchPspecs        ,
    bindingSetReadClassBranchPspecs         ,
    bindingSetWriteClassBranchPspecs        ,


-- ** Current
    bindingSetClearCurrent                  ,
    bindingSetCurrent                       ,
    bindingSetReadCurrent                   ,
    bindingSetWriteCurrent                  ,


-- ** Entries
    bindingSetClearEntries                  ,
    bindingSetEntries                       ,
    bindingSetReadEntries                   ,
    bindingSetWriteEntries                  ,


-- ** Parsed
    bindingSetParsed                        ,
    bindingSetReadParsed                    ,
    bindingSetWriteParsed                   ,


-- ** Priority
    bindingSetPriority                      ,
    bindingSetReadPriority                  ,
    bindingSetWritePriority                 ,


-- ** SetName
    bindingSetClearSetName                  ,
    bindingSetReadSetName                   ,
    bindingSetSetName                       ,
    bindingSetWriteSetName                  ,


-- ** WidgetClassPspecs
    bindingSetClearWidgetClassPspecs        ,
    bindingSetReadWidgetClassPspecs         ,
    bindingSetWidgetClassPspecs             ,
    bindingSetWriteWidgetClassPspecs        ,


-- ** WidgetPathPspecs
    bindingSetClearWidgetPathPspecs         ,
    bindingSetReadWidgetPathPspecs          ,
    bindingSetWidgetPathPspecs              ,
    bindingSetWriteWidgetPathPspecs         ,




    ) where

import Data.GI.Base.ShortPrelude

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.Gtk.Types
import GI.Gtk.Callbacks
import qualified GI.GObject as GObject
import qualified GI.Gdk as Gdk

newtype BindingSet = BindingSet (ForeignPtr BindingSet)
instance WrappedPtr BindingSet where
    wrappedPtrCalloc = callocBytes 64
    wrappedPtrCopy = copyPtr 64
    wrappedPtrFree = Just ptr_to_g_free

-- | Construct a `BindingSet` struct initialized to zero.
newZeroBindingSet :: MonadIO m => m BindingSet
newZeroBindingSet = liftIO $ wrappedPtrCalloc >>= wrapPtr BindingSet

instance tag ~ 'AttrSet => Constructible BindingSet tag where
    new _ attrs = do
        o <- newZeroBindingSet
        GI.Attributes.set o attrs
        return o


noBindingSet :: Maybe BindingSet
noBindingSet = Nothing

bindingSetReadSetName :: MonadIO m => BindingSet -> m (Maybe T.Text)
bindingSetReadSetName s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CString
    result <- convertIfNonNull val $ \val' -> do
        val'' <- cstringToText val'
        return val''
    return result

bindingSetWriteSetName :: MonadIO m => BindingSet -> CString -> m ()
bindingSetWriteSetName s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (val :: CString)

bindingSetClearSetName :: MonadIO m => BindingSet -> m ()
bindingSetClearSetName s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (nullPtr :: CString)

data BindingSetSetNameFieldInfo
instance AttrInfo BindingSetSetNameFieldInfo where
    type AttrAllowedOps BindingSetSetNameFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint BindingSetSetNameFieldInfo = (~) CString
    type AttrBaseTypeConstraint BindingSetSetNameFieldInfo = (~) BindingSet
    type AttrGetType BindingSetSetNameFieldInfo = Maybe T.Text
    type AttrLabel BindingSetSetNameFieldInfo = "set_name"
    attrGet _ = bindingSetReadSetName
    attrSet _ = bindingSetWriteSetName
    attrConstruct = undefined
    attrClear _ = bindingSetClearSetName

bindingSetSetName :: AttrLabelProxy "setName"
bindingSetSetName = AttrLabelProxy


bindingSetReadPriority :: MonadIO m => BindingSet -> m Int32
bindingSetReadPriority s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 8) :: IO Int32
    return val

bindingSetWritePriority :: MonadIO m => BindingSet -> Int32 -> m ()
bindingSetWritePriority s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (val :: Int32)

data BindingSetPriorityFieldInfo
instance AttrInfo BindingSetPriorityFieldInfo where
    type AttrAllowedOps BindingSetPriorityFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint BindingSetPriorityFieldInfo = (~) Int32
    type AttrBaseTypeConstraint BindingSetPriorityFieldInfo = (~) BindingSet
    type AttrGetType BindingSetPriorityFieldInfo = Int32
    type AttrLabel BindingSetPriorityFieldInfo = "priority"
    attrGet _ = bindingSetReadPriority
    attrSet _ = bindingSetWritePriority
    attrConstruct = undefined
    attrClear _ = undefined

bindingSetPriority :: AttrLabelProxy "priority"
bindingSetPriority = AttrLabelProxy


bindingSetReadWidgetPathPspecs :: MonadIO m => BindingSet -> m ([Ptr ()])
bindingSetReadWidgetPathPspecs s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO (Ptr (GSList (Ptr ())))
    val' <- unpackGSList val
    return val'

bindingSetWriteWidgetPathPspecs :: MonadIO m => BindingSet -> Ptr (GSList (Ptr ())) -> m ()
bindingSetWriteWidgetPathPspecs s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (val :: Ptr (GSList (Ptr ())))

bindingSetClearWidgetPathPspecs :: MonadIO m => BindingSet -> m ()
bindingSetClearWidgetPathPspecs s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (nullPtr :: Ptr (GSList (Ptr ())))

data BindingSetWidgetPathPspecsFieldInfo
instance AttrInfo BindingSetWidgetPathPspecsFieldInfo where
    type AttrAllowedOps BindingSetWidgetPathPspecsFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint BindingSetWidgetPathPspecsFieldInfo = (~) (Ptr (GSList (Ptr ())))
    type AttrBaseTypeConstraint BindingSetWidgetPathPspecsFieldInfo = (~) BindingSet
    type AttrGetType BindingSetWidgetPathPspecsFieldInfo = [Ptr ()]
    type AttrLabel BindingSetWidgetPathPspecsFieldInfo = "widget_path_pspecs"
    attrGet _ = bindingSetReadWidgetPathPspecs
    attrSet _ = bindingSetWriteWidgetPathPspecs
    attrConstruct = undefined
    attrClear _ = bindingSetClearWidgetPathPspecs

bindingSetWidgetPathPspecs :: AttrLabelProxy "widgetPathPspecs"
bindingSetWidgetPathPspecs = AttrLabelProxy


bindingSetReadWidgetClassPspecs :: MonadIO m => BindingSet -> m ([Ptr ()])
bindingSetReadWidgetClassPspecs s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 24) :: IO (Ptr (GSList (Ptr ())))
    val' <- unpackGSList val
    return val'

bindingSetWriteWidgetClassPspecs :: MonadIO m => BindingSet -> Ptr (GSList (Ptr ())) -> m ()
bindingSetWriteWidgetClassPspecs s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (val :: Ptr (GSList (Ptr ())))

bindingSetClearWidgetClassPspecs :: MonadIO m => BindingSet -> m ()
bindingSetClearWidgetClassPspecs s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (nullPtr :: Ptr (GSList (Ptr ())))

data BindingSetWidgetClassPspecsFieldInfo
instance AttrInfo BindingSetWidgetClassPspecsFieldInfo where
    type AttrAllowedOps BindingSetWidgetClassPspecsFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint BindingSetWidgetClassPspecsFieldInfo = (~) (Ptr (GSList (Ptr ())))
    type AttrBaseTypeConstraint BindingSetWidgetClassPspecsFieldInfo = (~) BindingSet
    type AttrGetType BindingSetWidgetClassPspecsFieldInfo = [Ptr ()]
    type AttrLabel BindingSetWidgetClassPspecsFieldInfo = "widget_class_pspecs"
    attrGet _ = bindingSetReadWidgetClassPspecs
    attrSet _ = bindingSetWriteWidgetClassPspecs
    attrConstruct = undefined
    attrClear _ = bindingSetClearWidgetClassPspecs

bindingSetWidgetClassPspecs :: AttrLabelProxy "widgetClassPspecs"
bindingSetWidgetClassPspecs = AttrLabelProxy


bindingSetReadClassBranchPspecs :: MonadIO m => BindingSet -> m ([Ptr ()])
bindingSetReadClassBranchPspecs s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 32) :: IO (Ptr (GSList (Ptr ())))
    val' <- unpackGSList val
    return val'

bindingSetWriteClassBranchPspecs :: MonadIO m => BindingSet -> Ptr (GSList (Ptr ())) -> m ()
bindingSetWriteClassBranchPspecs s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 32) (val :: Ptr (GSList (Ptr ())))

bindingSetClearClassBranchPspecs :: MonadIO m => BindingSet -> m ()
bindingSetClearClassBranchPspecs s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 32) (nullPtr :: Ptr (GSList (Ptr ())))

data BindingSetClassBranchPspecsFieldInfo
instance AttrInfo BindingSetClassBranchPspecsFieldInfo where
    type AttrAllowedOps BindingSetClassBranchPspecsFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint BindingSetClassBranchPspecsFieldInfo = (~) (Ptr (GSList (Ptr ())))
    type AttrBaseTypeConstraint BindingSetClassBranchPspecsFieldInfo = (~) BindingSet
    type AttrGetType BindingSetClassBranchPspecsFieldInfo = [Ptr ()]
    type AttrLabel BindingSetClassBranchPspecsFieldInfo = "class_branch_pspecs"
    attrGet _ = bindingSetReadClassBranchPspecs
    attrSet _ = bindingSetWriteClassBranchPspecs
    attrConstruct = undefined
    attrClear _ = bindingSetClearClassBranchPspecs

bindingSetClassBranchPspecs :: AttrLabelProxy "classBranchPspecs"
bindingSetClassBranchPspecs = AttrLabelProxy


bindingSetReadEntries :: MonadIO m => BindingSet -> m (Maybe BindingEntry)
bindingSetReadEntries s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 40) :: IO (Ptr BindingEntry)
    result <- convertIfNonNull val $ \val' -> do
        val'' <- (newPtr BindingEntry) val'
        return val''
    return result

bindingSetWriteEntries :: MonadIO m => BindingSet -> Ptr BindingEntry -> m ()
bindingSetWriteEntries s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 40) (val :: Ptr BindingEntry)

bindingSetClearEntries :: MonadIO m => BindingSet -> m ()
bindingSetClearEntries s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 40) (nullPtr :: Ptr BindingEntry)

data BindingSetEntriesFieldInfo
instance AttrInfo BindingSetEntriesFieldInfo where
    type AttrAllowedOps BindingSetEntriesFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint BindingSetEntriesFieldInfo = (~) (Ptr BindingEntry)
    type AttrBaseTypeConstraint BindingSetEntriesFieldInfo = (~) BindingSet
    type AttrGetType BindingSetEntriesFieldInfo = Maybe BindingEntry
    type AttrLabel BindingSetEntriesFieldInfo = "entries"
    attrGet _ = bindingSetReadEntries
    attrSet _ = bindingSetWriteEntries
    attrConstruct = undefined
    attrClear _ = bindingSetClearEntries

bindingSetEntries :: AttrLabelProxy "entries"
bindingSetEntries = AttrLabelProxy


bindingSetReadCurrent :: MonadIO m => BindingSet -> m (Maybe BindingEntry)
bindingSetReadCurrent s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 48) :: IO (Ptr BindingEntry)
    result <- convertIfNonNull val $ \val' -> do
        val'' <- (newPtr BindingEntry) val'
        return val''
    return result

bindingSetWriteCurrent :: MonadIO m => BindingSet -> Ptr BindingEntry -> m ()
bindingSetWriteCurrent s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 48) (val :: Ptr BindingEntry)

bindingSetClearCurrent :: MonadIO m => BindingSet -> m ()
bindingSetClearCurrent s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 48) (nullPtr :: Ptr BindingEntry)

data BindingSetCurrentFieldInfo
instance AttrInfo BindingSetCurrentFieldInfo where
    type AttrAllowedOps BindingSetCurrentFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint BindingSetCurrentFieldInfo = (~) (Ptr BindingEntry)
    type AttrBaseTypeConstraint BindingSetCurrentFieldInfo = (~) BindingSet
    type AttrGetType BindingSetCurrentFieldInfo = Maybe BindingEntry
    type AttrLabel BindingSetCurrentFieldInfo = "current"
    attrGet _ = bindingSetReadCurrent
    attrSet _ = bindingSetWriteCurrent
    attrConstruct = undefined
    attrClear _ = bindingSetClearCurrent

bindingSetCurrent :: AttrLabelProxy "current"
bindingSetCurrent = AttrLabelProxy


bindingSetReadParsed :: MonadIO m => BindingSet -> m Word32
bindingSetReadParsed s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 56) :: IO Word32
    return val

bindingSetWriteParsed :: MonadIO m => BindingSet -> Word32 -> m ()
bindingSetWriteParsed s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 56) (val :: Word32)

data BindingSetParsedFieldInfo
instance AttrInfo BindingSetParsedFieldInfo where
    type AttrAllowedOps BindingSetParsedFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint BindingSetParsedFieldInfo = (~) Word32
    type AttrBaseTypeConstraint BindingSetParsedFieldInfo = (~) BindingSet
    type AttrGetType BindingSetParsedFieldInfo = Word32
    type AttrLabel BindingSetParsedFieldInfo = "parsed"
    attrGet _ = bindingSetReadParsed
    attrSet _ = bindingSetWriteParsed
    attrConstruct = undefined
    attrClear _ = undefined

bindingSetParsed :: AttrLabelProxy "parsed"
bindingSetParsed = AttrLabelProxy



type instance AttributeList BindingSet = BindingSetAttributeList
type BindingSetAttributeList = ('[ '("setName", BindingSetSetNameFieldInfo), '("priority", BindingSetPriorityFieldInfo), '("widgetPathPspecs", BindingSetWidgetPathPspecsFieldInfo), '("widgetClassPspecs", BindingSetWidgetClassPspecsFieldInfo), '("classBranchPspecs", BindingSetClassBranchPspecsFieldInfo), '("entries", BindingSetEntriesFieldInfo), '("current", BindingSetCurrentFieldInfo), '("parsed", BindingSetParsedFieldInfo)] :: [(Symbol, *)])

-- method BindingSet::activate
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gtk" "BindingSet", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "keyval", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "modifiers", argType = TInterface "Gdk" "ModifierType", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "object", argType = TInterface "GObject" "Object", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gtk_binding_set_activate" gtk_binding_set_activate :: 
    Ptr BindingSet ->                       -- _obj : TInterface "Gtk" "BindingSet"
    Word32 ->                               -- keyval : TBasicType TUInt
    CUInt ->                                -- modifiers : TInterface "Gdk" "ModifierType"
    Ptr GObject.Object ->                   -- object : TInterface "GObject" "Object"
    IO CInt


bindingSetActivate ::
    (MonadIO m, GObject.ObjectK a) =>
    BindingSet                              -- _obj
    -> Word32                               -- keyval
    -> [Gdk.ModifierType]                   -- modifiers
    -> a                                    -- object
    -> m Bool                               -- result
bindingSetActivate _obj keyval modifiers object = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let modifiers' = gflagsToWord modifiers
    let object' = unsafeManagedPtrCastPtr object
    result <- gtk_binding_set_activate _obj' keyval modifiers' object'
    let result' = (/= 0) result
    touchManagedPtr _obj
    touchManagedPtr object
    return result'

data BindingSetActivateMethodInfo
instance (signature ~ (Word32 -> [Gdk.ModifierType] -> a -> m Bool), MonadIO m, GObject.ObjectK a) => MethodInfo BindingSetActivateMethodInfo BindingSet signature where
    overloadedMethod _ = bindingSetActivate

-- method BindingSet::add_path
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "Gtk" "BindingSet", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "path_type", argType = TInterface "Gtk" "PathType", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "path_pattern", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "priority", argType = TInterface "Gtk" "PathPriorityType", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gtk_binding_set_add_path" gtk_binding_set_add_path :: 
    Ptr BindingSet ->                       -- _obj : TInterface "Gtk" "BindingSet"
    CUInt ->                                -- path_type : TInterface "Gtk" "PathType"
    CString ->                              -- path_pattern : TBasicType TUTF8
    CUInt ->                                -- priority : TInterface "Gtk" "PathPriorityType"
    IO ()

{-# DEPRECATED bindingSetAddPath ["(Since version 3.0)"]#-}
bindingSetAddPath ::
    (MonadIO m) =>
    BindingSet                              -- _obj
    -> PathType                             -- pathType
    -> T.Text                               -- pathPattern
    -> PathPriorityType                     -- priority
    -> m ()                                 -- result
bindingSetAddPath _obj pathType pathPattern priority = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    let pathType' = (fromIntegral . fromEnum) pathType
    pathPattern' <- textToCString pathPattern
    let priority' = (fromIntegral . fromEnum) priority
    gtk_binding_set_add_path _obj' pathType' pathPattern' priority'
    touchManagedPtr _obj
    freeMem pathPattern'
    return ()

data BindingSetAddPathMethodInfo
instance (signature ~ (PathType -> T.Text -> PathPriorityType -> m ()), MonadIO m) => MethodInfo BindingSetAddPathMethodInfo BindingSet signature where
    overloadedMethod _ = bindingSetAddPath

-- method BindingSet::find
-- method type : MemberFunction
-- Args : [Arg {argCName = "set_name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface "Gtk" "BindingSet")
-- throws : False
-- Skip return : False

foreign import ccall "gtk_binding_set_find" gtk_binding_set_find :: 
    CString ->                              -- set_name : TBasicType TUTF8
    IO (Ptr BindingSet)


bindingSetFind ::
    (MonadIO m) =>
    T.Text                                  -- setName
    -> m BindingSet                         -- result
bindingSetFind setName = liftIO $ do
    setName' <- textToCString setName
    result <- gtk_binding_set_find setName'
    checkUnexpectedReturnNULL "gtk_binding_set_find" result
    result' <- (newPtr BindingSet) result
    freeMem setName'
    return result'

type family ResolveBindingSetMethod (t :: Symbol) (o :: *) :: * where
    ResolveBindingSetMethod "activate" o = BindingSetActivateMethodInfo
    ResolveBindingSetMethod "addPath" o = BindingSetAddPathMethodInfo
    ResolveBindingSetMethod l o = MethodResolutionFailed l o

instance (info ~ ResolveBindingSetMethod t BindingSet, MethodInfo info BindingSet p) => IsLabelProxy t (BindingSet -> p) where
    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveBindingSetMethod t BindingSet, MethodInfo info BindingSet p) => IsLabel t (BindingSet -> p) where
    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif