{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) Buffer lists are an object containing a list of buffers. Buffer lists are created with 'GI.Gst.Structs.BufferList.bufferListNew' and filled with data using a 'GI.Gst.Structs.BufferList.bufferListInsert'. Buffer lists can be pushed on a srcpad with 'GI.Gst.Objects.Pad.padPushList'. This is interesting when multiple buffers need to be pushed in one go because it can reduce the amount of overhead for pushing each buffer individually. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.Gst.Structs.BufferList ( -- * Exported types BufferList(..) , noBufferList , -- * Methods -- ** calculateSize #method:calculateSize# #if ENABLE_OVERLOADING BufferListCalculateSizeMethodInfo , #endif bufferListCalculateSize , -- ** copyDeep #method:copyDeep# #if ENABLE_OVERLOADING BufferListCopyDeepMethodInfo , #endif bufferListCopyDeep , -- ** foreach #method:foreach# #if ENABLE_OVERLOADING BufferListForeachMethodInfo , #endif bufferListForeach , -- ** get #method:get# #if ENABLE_OVERLOADING BufferListGetMethodInfo , #endif bufferListGet , -- ** getWritable #method:getWritable# #if ENABLE_OVERLOADING BufferListGetWritableMethodInfo , #endif bufferListGetWritable , -- ** insert #method:insert# #if ENABLE_OVERLOADING BufferListInsertMethodInfo , #endif bufferListInsert , -- ** length #method:length# #if ENABLE_OVERLOADING BufferListLengthMethodInfo , #endif bufferListLength , -- ** new #method:new# bufferListNew , -- ** newSized #method:newSized# bufferListNewSized , -- ** remove #method:remove# #if ENABLE_OVERLOADING BufferListRemoveMethodInfo , #endif bufferListRemove , ) where import Data.GI.Base.ShortPrelude import qualified Data.GI.Base.ShortPrelude as SP import qualified Data.GI.Base.Overloading as O import qualified Prelude as P import qualified Data.GI.Base.Attributes as GI.Attributes import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr import qualified Data.GI.Base.GClosure as B.GClosure import qualified Data.GI.Base.GError as B.GError import qualified Data.GI.Base.GVariant as B.GVariant import qualified Data.GI.Base.GValue as B.GValue import qualified Data.GI.Base.GParamSpec as B.GParamSpec import qualified Data.GI.Base.CallStack as B.CallStack import qualified Data.GI.Base.Properties as B.Properties import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import qualified Foreign.Ptr as FP import qualified GHC.OverloadedLabels as OL import qualified GI.Gst.Callbacks as Gst.Callbacks import {-# SOURCE #-} qualified GI.Gst.Structs.Buffer as Gst.Buffer -- | Memory-managed wrapper type. newtype BufferList = BufferList (ManagedPtr BufferList) foreign import ccall "gst_buffer_list_get_type" c_gst_buffer_list_get_type :: IO GType instance BoxedObject BufferList where boxedType _ = c_gst_buffer_list_get_type -- | A convenience alias for `Nothing` :: `Maybe` `BufferList`. noBufferList :: Maybe BufferList noBufferList = Nothing #if ENABLE_OVERLOADING instance O.HasAttributeList BufferList type instance O.AttributeList BufferList = BufferListAttributeList type BufferListAttributeList = ('[ ] :: [(Symbol, *)]) #endif -- method BufferList::new -- method type : Constructor -- Args : [] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gst", name = "BufferList"})) -- throws : False -- Skip return : False foreign import ccall "gst_buffer_list_new" gst_buffer_list_new :: IO (Ptr BufferList) {- | Creates a new, empty 'GI.Gst.Structs.BufferList.BufferList'. The caller is responsible for unreffing the returned 'GI.Gst.Structs.BufferList.BufferList'. Free-function: gst_buffer_list_unref -} bufferListNew :: (B.CallStack.HasCallStack, MonadIO m) => m BufferList {- ^ __Returns:__ the new 'GI.Gst.Structs.BufferList.BufferList'. @/gst_buffer_list_unref()/@ after usage. -} bufferListNew = liftIO $ do result <- gst_buffer_list_new checkUnexpectedReturnNULL "bufferListNew" result result' <- (wrapBoxed BufferList) result return result' #if ENABLE_OVERLOADING #endif -- method BufferList::new_sized -- method type : Constructor -- Args : [Arg {argCName = "size", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an initial reserved size", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gst", name = "BufferList"})) -- throws : False -- Skip return : False foreign import ccall "gst_buffer_list_new_sized" gst_buffer_list_new_sized :: Word32 -> -- size : TBasicType TUInt IO (Ptr BufferList) {- | Creates a new, empty 'GI.Gst.Structs.BufferList.BufferList'. The caller is responsible for unreffing the returned 'GI.Gst.Structs.BufferList.BufferList'. The list will have /@size@/ space preallocated so that memory reallocations can be avoided. Free-function: gst_buffer_list_unref -} bufferListNewSized :: (B.CallStack.HasCallStack, MonadIO m) => Word32 {- ^ /@size@/: an initial reserved size -} -> m BufferList {- ^ __Returns:__ the new 'GI.Gst.Structs.BufferList.BufferList'. @/gst_buffer_list_unref()/@ after usage. -} bufferListNewSized size = liftIO $ do result <- gst_buffer_list_new_sized size checkUnexpectedReturnNULL "bufferListNewSized" result result' <- (wrapBoxed BufferList) result return result' #if ENABLE_OVERLOADING #endif -- method BufferList::calculate_size -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "BufferList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBufferList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TUInt64) -- throws : False -- Skip return : False foreign import ccall "gst_buffer_list_calculate_size" gst_buffer_list_calculate_size :: Ptr BufferList -> -- list : TInterface (Name {namespace = "Gst", name = "BufferList"}) IO Word64 {- | Calculates the size of the data contained in buffer list by adding the size of all buffers. /Since: 1.14/ -} bufferListCalculateSize :: (B.CallStack.HasCallStack, MonadIO m) => BufferList {- ^ /@list@/: a 'GI.Gst.Structs.BufferList.BufferList' -} -> m Word64 {- ^ __Returns:__ the size of the data contained in buffer list in bytes. -} bufferListCalculateSize list = liftIO $ do list' <- unsafeManagedPtrGetPtr list result <- gst_buffer_list_calculate_size list' touchManagedPtr list return result #if ENABLE_OVERLOADING data BufferListCalculateSizeMethodInfo instance (signature ~ (m Word64), MonadIO m) => O.MethodInfo BufferListCalculateSizeMethodInfo BufferList signature where overloadedMethod _ = bufferListCalculateSize #endif -- method BufferList::copy_deep -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "BufferList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBufferList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gst", name = "BufferList"})) -- throws : False -- Skip return : False foreign import ccall "gst_buffer_list_copy_deep" gst_buffer_list_copy_deep :: Ptr BufferList -> -- list : TInterface (Name {namespace = "Gst", name = "BufferList"}) IO (Ptr BufferList) {- | Create a copy of the given buffer list. This will make a newly allocated copy of the buffer that the source buffer list contains. /Since: 1.6/ -} bufferListCopyDeep :: (B.CallStack.HasCallStack, MonadIO m) => BufferList {- ^ /@list@/: a 'GI.Gst.Structs.BufferList.BufferList' -} -> m BufferList {- ^ __Returns:__ a new copy of /@list@/. -} bufferListCopyDeep list = liftIO $ do list' <- unsafeManagedPtrGetPtr list result <- gst_buffer_list_copy_deep list' checkUnexpectedReturnNULL "bufferListCopyDeep" result result' <- (wrapBoxed BufferList) result touchManagedPtr list return result' #if ENABLE_OVERLOADING data BufferListCopyDeepMethodInfo instance (signature ~ (m BufferList), MonadIO m) => O.MethodInfo BufferListCopyDeepMethodInfo BufferList signature where overloadedMethod _ = bufferListCopyDeep #endif -- method BufferList::foreach -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "BufferList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBufferList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "func", argType = TInterface (Name {namespace = "Gst", name = "BufferListFunc"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBufferListFunc to call", sinceVersion = Nothing}, argScope = ScopeTypeCall, argClosure = 2, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user data passed to @func", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TBoolean) -- throws : False -- Skip return : False foreign import ccall "gst_buffer_list_foreach" gst_buffer_list_foreach :: Ptr BufferList -> -- list : TInterface (Name {namespace = "Gst", name = "BufferList"}) FunPtr Gst.Callbacks.C_BufferListFunc -> -- func : TInterface (Name {namespace = "Gst", name = "BufferListFunc"}) Ptr () -> -- user_data : TBasicType TPtr IO CInt {- | Call /@func@/ with /@data@/ for each buffer in /@list@/. /@func@/ can modify the passed buffer pointer or its contents. The return value of /@func@/ define if this function returns or if the remaining buffers in the list should be skipped. -} bufferListForeach :: (B.CallStack.HasCallStack, MonadIO m) => BufferList {- ^ /@list@/: a 'GI.Gst.Structs.BufferList.BufferList' -} -> Gst.Callbacks.BufferListFunc {- ^ /@func@/: a 'GI.Gst.Callbacks.BufferListFunc' to call -} -> m Bool {- ^ __Returns:__ 'True' when /@func@/ returned 'True' for each buffer in /@list@/ or when /@list@/ is empty. -} bufferListForeach list func = liftIO $ do list' <- unsafeManagedPtrGetPtr list func' <- Gst.Callbacks.mk_BufferListFunc (Gst.Callbacks.wrap_BufferListFunc Nothing (Gst.Callbacks.drop_closures_BufferListFunc func)) let userData = nullPtr result <- gst_buffer_list_foreach list' func' userData let result' = (/= 0) result safeFreeFunPtr $ castFunPtrToPtr func' touchManagedPtr list return result' #if ENABLE_OVERLOADING data BufferListForeachMethodInfo instance (signature ~ (Gst.Callbacks.BufferListFunc -> m Bool), MonadIO m) => O.MethodInfo BufferListForeachMethodInfo BufferList signature where overloadedMethod _ = bufferListForeach #endif -- method BufferList::get -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "BufferList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBufferList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "idx", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the index", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gst", name = "Buffer"})) -- throws : False -- Skip return : False foreign import ccall "gst_buffer_list_get" gst_buffer_list_get :: Ptr BufferList -> -- list : TInterface (Name {namespace = "Gst", name = "BufferList"}) Word32 -> -- idx : TBasicType TUInt IO (Ptr Gst.Buffer.Buffer) {- | Get the buffer at /@idx@/. You must make sure that /@idx@/ does not exceed the number of buffers available. -} bufferListGet :: (B.CallStack.HasCallStack, MonadIO m) => BufferList {- ^ /@list@/: a 'GI.Gst.Structs.BufferList.BufferList' -} -> Word32 {- ^ /@idx@/: the index -} -> m (Maybe Gst.Buffer.Buffer) {- ^ __Returns:__ the buffer at /@idx@/ in /@group@/ or 'Nothing' when there is no buffer. The buffer remains valid as long as /@list@/ is valid and buffer is not removed from the list. -} bufferListGet list idx = liftIO $ do list' <- unsafeManagedPtrGetPtr list result <- gst_buffer_list_get list' idx maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (newBoxed Gst.Buffer.Buffer) result' return result'' touchManagedPtr list return maybeResult #if ENABLE_OVERLOADING data BufferListGetMethodInfo instance (signature ~ (Word32 -> m (Maybe Gst.Buffer.Buffer)), MonadIO m) => O.MethodInfo BufferListGetMethodInfo BufferList signature where overloadedMethod _ = bufferListGet #endif -- method BufferList::get_writable -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "BufferList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a (writable) #GstBufferList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "idx", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the index", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "Gst", name = "Buffer"})) -- throws : False -- Skip return : False foreign import ccall "gst_buffer_list_get_writable" gst_buffer_list_get_writable :: Ptr BufferList -> -- list : TInterface (Name {namespace = "Gst", name = "BufferList"}) Word32 -> -- idx : TBasicType TUInt IO (Ptr Gst.Buffer.Buffer) {- | Gets the buffer at /@idx@/, ensuring it is a writable buffer. You must make sure that /@idx@/ does not exceed the number of buffers available. /Since: 1.14/ -} bufferListGetWritable :: (B.CallStack.HasCallStack, MonadIO m) => BufferList {- ^ /@list@/: a (writable) 'GI.Gst.Structs.BufferList.BufferList' -} -> Word32 {- ^ /@idx@/: the index -} -> m (Maybe Gst.Buffer.Buffer) {- ^ __Returns:__ the buffer at /@idx@/ in /@group@/. The returned buffer remains valid as long as /@list@/ is valid and the buffer is not removed from the list. -} bufferListGetWritable list idx = liftIO $ do list' <- unsafeManagedPtrGetPtr list result <- gst_buffer_list_get_writable list' idx maybeResult <- convertIfNonNull result $ \result' -> do result'' <- (newBoxed Gst.Buffer.Buffer) result' return result'' touchManagedPtr list return maybeResult #if ENABLE_OVERLOADING data BufferListGetWritableMethodInfo instance (signature ~ (Word32 -> m (Maybe Gst.Buffer.Buffer)), MonadIO m) => O.MethodInfo BufferListGetWritableMethodInfo BufferList signature where overloadedMethod _ = bufferListGetWritable #endif -- method BufferList::insert -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "BufferList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBufferList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "idx", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the index", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buffer", argType = TInterface (Name {namespace = "Gst", name = "Buffer"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBuffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "gst_buffer_list_insert" gst_buffer_list_insert :: Ptr BufferList -> -- list : TInterface (Name {namespace = "Gst", name = "BufferList"}) Int32 -> -- idx : TBasicType TInt Ptr Gst.Buffer.Buffer -> -- buffer : TInterface (Name {namespace = "Gst", name = "Buffer"}) IO () {- | Insert /@buffer@/ at /@idx@/ in /@list@/. Other buffers are moved to make room for this new buffer. A -1 value for /@idx@/ will append the buffer at the end. -} bufferListInsert :: (B.CallStack.HasCallStack, MonadIO m) => BufferList {- ^ /@list@/: a 'GI.Gst.Structs.BufferList.BufferList' -} -> Int32 {- ^ /@idx@/: the index -} -> Gst.Buffer.Buffer {- ^ /@buffer@/: a 'GI.Gst.Structs.Buffer.Buffer' -} -> m () bufferListInsert list idx buffer = liftIO $ do list' <- unsafeManagedPtrGetPtr list buffer' <- B.ManagedPtr.disownBoxed buffer gst_buffer_list_insert list' idx buffer' touchManagedPtr list touchManagedPtr buffer return () #if ENABLE_OVERLOADING data BufferListInsertMethodInfo instance (signature ~ (Int32 -> Gst.Buffer.Buffer -> m ()), MonadIO m) => O.MethodInfo BufferListInsertMethodInfo BufferList signature where overloadedMethod _ = bufferListInsert #endif -- method BufferList::length -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "BufferList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBufferList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TBasicType TUInt) -- throws : False -- Skip return : False foreign import ccall "gst_buffer_list_length" gst_buffer_list_length :: Ptr BufferList -> -- list : TInterface (Name {namespace = "Gst", name = "BufferList"}) IO Word32 {- | Returns the number of buffers in /@list@/. -} bufferListLength :: (B.CallStack.HasCallStack, MonadIO m) => BufferList {- ^ /@list@/: a 'GI.Gst.Structs.BufferList.BufferList' -} -> m Word32 {- ^ __Returns:__ the number of buffers in the buffer list -} bufferListLength list = liftIO $ do list' <- unsafeManagedPtrGetPtr list result <- gst_buffer_list_length list' touchManagedPtr list return result #if ENABLE_OVERLOADING data BufferListLengthMethodInfo instance (signature ~ (m Word32), MonadIO m) => O.MethodInfo BufferListLengthMethodInfo BufferList signature where overloadedMethod _ = bufferListLength #endif -- method BufferList::remove -- method type : OrdinaryMethod -- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "BufferList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstBufferList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "idx", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the index", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "length", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the amount to remove", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "gst_buffer_list_remove" gst_buffer_list_remove :: Ptr BufferList -> -- list : TInterface (Name {namespace = "Gst", name = "BufferList"}) Word32 -> -- idx : TBasicType TUInt Word32 -> -- length : TBasicType TUInt IO () {- | Remove /@length@/ buffers starting from /@idx@/ in /@list@/. The following buffers are moved to close the gap. -} bufferListRemove :: (B.CallStack.HasCallStack, MonadIO m) => BufferList {- ^ /@list@/: a 'GI.Gst.Structs.BufferList.BufferList' -} -> Word32 {- ^ /@idx@/: the index -} -> Word32 {- ^ /@length@/: the amount to remove -} -> m () bufferListRemove list idx length_ = liftIO $ do list' <- unsafeManagedPtrGetPtr list gst_buffer_list_remove list' idx length_ touchManagedPtr list return () #if ENABLE_OVERLOADING data BufferListRemoveMethodInfo instance (signature ~ (Word32 -> Word32 -> m ()), MonadIO m) => O.MethodInfo BufferListRemoveMethodInfo BufferList signature where overloadedMethod _ = bufferListRemove #endif #if ENABLE_OVERLOADING type family ResolveBufferListMethod (t :: Symbol) (o :: *) :: * where ResolveBufferListMethod "calculateSize" o = BufferListCalculateSizeMethodInfo ResolveBufferListMethod "copyDeep" o = BufferListCopyDeepMethodInfo ResolveBufferListMethod "foreach" o = BufferListForeachMethodInfo ResolveBufferListMethod "get" o = BufferListGetMethodInfo ResolveBufferListMethod "insert" o = BufferListInsertMethodInfo ResolveBufferListMethod "length" o = BufferListLengthMethodInfo ResolveBufferListMethod "remove" o = BufferListRemoveMethodInfo ResolveBufferListMethod "getWritable" o = BufferListGetWritableMethodInfo ResolveBufferListMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveBufferListMethod t BufferList, O.MethodInfo info BufferList p) => OL.IsLabel t (BufferList -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif