haskell-gi-base 0.9 → 0.10
raw patch · 7 files changed
+73/−66 lines, 7 filesdep +transformersdep ~basePVP ok
version bump matches the API change (PVP)
Dependencies added: transformers
Dependency ranges changed: base
API changes (from Hackage documentation)
- Data.GI.Base.BasicTypes: [gtypeToCGType] :: GType -> CGType
- Data.GI.Base.BasicTypes: [unwrapPtr] :: PtrWrapped a -> Ptr a
- Data.GI.Base.Closure: instance Data.GI.Base.BasicTypes.BoxedObject Data.GI.Base.Closure.Closure
- Data.GI.Base.GError: instance Data.GI.Base.BasicTypes.BoxedObject Data.GI.Base.GError.GError
- Data.GI.Base.GError: instance GHC.Exception.Exception Data.GI.Base.GError.GError
- Data.GI.Base.GError: instance GHC.Show.Show Data.GI.Base.GError.GError
- Data.GI.Base.GValue: instance Data.GI.Base.BasicTypes.BoxedObject Data.GI.Base.GValue.GValue
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue (GHC.Ptr.Ptr a)
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue Data.GI.Base.BasicTypes.GType
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue Data.Text.Internal.Text
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Base.String
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Int.Int32
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Int.Int64
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Types.Bool
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Types.Double
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Types.Float
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Word.Word32
- Data.GI.Base.GValue: instance Data.GI.Base.GValue.IsGValue GHC.Word.Word64
- Data.GI.Base.GVariant: instance (Data.GI.Base.GVariant.IsGVariant a, Data.GI.Base.GVariant.IsGVariant b) => Data.GI.Base.GVariant.IsGVariant (a, b)
- Data.GI.Base.GVariant: instance (Data.GI.Base.GVariant.IsGVariant a, Data.GI.Base.GVariant.IsGVariant b, Data.GI.Base.GVariant.IsGVariant c) => Data.GI.Base.GVariant.IsGVariant (a, b, c)
- Data.GI.Base.GVariant: instance (Data.GI.Base.GVariant.IsGVariant a, Data.GI.Base.GVariant.IsGVariant b, Data.GI.Base.GVariant.IsGVariant c, Data.GI.Base.GVariant.IsGVariant d) => Data.GI.Base.GVariant.IsGVariant (a, b, c, d)
- Data.GI.Base.GVariant: instance (Data.GI.Base.GVariant.IsGVariant a, Data.GI.Base.GVariant.IsGVariant b, Data.GI.Base.GVariant.IsGVariant c, Data.GI.Base.GVariant.IsGVariant d, Data.GI.Base.GVariant.IsGVariant e) => Data.GI.Base.GVariant.IsGVariant (a, b, c, d, e)
- Data.GI.Base.GVariant: instance (Data.GI.Base.GVariant.IsGVariant a, Data.GI.Base.GVariant.IsGVariantBasicType a, Data.GI.Base.GVariant.IsGVariant b) => Data.GI.Base.GVariant.IsGVariant (Data.GI.Base.GVariant.GVariantDictEntry a b)
- Data.GI.Base.GVariant: instance (Data.GI.Base.GVariant.IsGVariant a, Data.GI.Base.GVariant.IsGVariantBasicType a, Data.GI.Base.GVariant.IsGVariant b) => Data.GI.Base.GVariant.IsGVariant (Data.Map.Base.Map a b)
- Data.GI.Base.GVariant: instance (GHC.Classes.Eq key, GHC.Classes.Eq value) => GHC.Classes.Eq (Data.GI.Base.GVariant.GVariantDictEntry key value)
- Data.GI.Base.GVariant: instance (GHC.Show.Show key, GHC.Show.Show value) => GHC.Show.Show (Data.GI.Base.GVariant.GVariantDictEntry key value)
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant ()
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant Data.ByteString.Internal.ByteString
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant Data.GI.Base.BasicTypes.GVariant
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant Data.GI.Base.GVariant.GVariantHandle
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant Data.GI.Base.GVariant.GVariantObjectPath
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant Data.GI.Base.GVariant.GVariantSignature
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant Data.Text.Internal.Text
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Int.Int16
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Int.Int32
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Int.Int64
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Types.Bool
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Types.Double
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Word.Word16
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Word.Word32
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Word.Word64
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant GHC.Word.Word8
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant a => Data.GI.Base.GVariant.IsGVariant (Data.GI.Base.GVariant.GVariantSinglet a)
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant a => Data.GI.Base.GVariant.IsGVariant (GHC.Base.Maybe a)
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariant a => Data.GI.Base.GVariant.IsGVariant [a]
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType Data.GI.Base.GVariant.GVariantHandle
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType Data.GI.Base.GVariant.GVariantObjectPath
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType Data.GI.Base.GVariant.GVariantSignature
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType Data.Text.Internal.Text
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Int.Int16
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Int.Int32
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Int.Int64
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Types.Bool
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Types.Double
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Word.Word16
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Word.Word32
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Word.Word64
- Data.GI.Base.GVariant: instance Data.GI.Base.GVariant.IsGVariantBasicType GHC.Word.Word8
- Data.GI.Base.GVariant: instance GHC.Classes.Eq Data.GI.Base.GVariant.GVariantHandle
- Data.GI.Base.GVariant: instance GHC.Classes.Eq Data.GI.Base.GVariant.GVariantObjectPath
- Data.GI.Base.GVariant: instance GHC.Classes.Eq Data.GI.Base.GVariant.GVariantSignature
- Data.GI.Base.GVariant: instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.GI.Base.GVariant.GVariantSinglet a)
- Data.GI.Base.GVariant: instance GHC.Classes.Ord Data.GI.Base.GVariant.GVariantHandle
- Data.GI.Base.GVariant: instance GHC.Classes.Ord Data.GI.Base.GVariant.GVariantObjectPath
- Data.GI.Base.GVariant: instance GHC.Classes.Ord Data.GI.Base.GVariant.GVariantSignature
- Data.GI.Base.GVariant: instance GHC.Show.Show Data.GI.Base.GVariant.GVariantHandle
- Data.GI.Base.GVariant: instance GHC.Show.Show Data.GI.Base.GVariant.GVariantObjectPath
- Data.GI.Base.GVariant: instance GHC.Show.Show Data.GI.Base.GVariant.GVariantSignature
- Data.GI.Base.GVariant: instance GHC.Show.Show a => GHC.Show.Show (Data.GI.Base.GVariant.GVariantSinglet a)
- Data.GI.Base.Overloading: instance Data.GI.Base.Overloading.HasAttribute attr o => Data.GI.Base.Overloading.HasAttr attr o
- Data.GI.Base.Properties: instance Data.GI.Base.Signals.SignalInfo Data.GI.Base.Properties.GObjectNotifySignalInfo
+ Data.GI.Base.BasicTypes: UnexpectedNullPointerReturn :: Text -> UnexpectedNullPointerReturn
+ Data.GI.Base.BasicTypes: data UnexpectedNullPointerReturn
+ Data.GI.Base.BasicTypes: gtypeToCGType :: GType -> CGType
+ Data.GI.Base.BasicTypes: instance Exception UnexpectedNullPointerReturn
+ Data.GI.Base.BasicTypes: instance Show UnexpectedNullPointerReturn
+ Data.GI.Base.BasicTypes: instance Typeable UnexpectedNullPointerReturn
+ Data.GI.Base.BasicTypes: nullPtrErrorMsg :: UnexpectedNullPointerReturn -> Text
+ Data.GI.Base.BasicTypes: unwrapPtr :: PtrWrapped a -> Ptr a
+ Data.GI.Base.Closure: instance BoxedObject Closure
+ Data.GI.Base.GError: instance BoxedObject GError
+ Data.GI.Base.GError: instance Exception GError
+ Data.GI.Base.GError: instance Show GError
+ Data.GI.Base.GError: instance Typeable GError
+ Data.GI.Base.GValue: instance BoxedObject GValue
+ Data.GI.Base.GValue: instance IsGValue (Ptr a)
+ Data.GI.Base.GValue: instance IsGValue Bool
+ Data.GI.Base.GValue: instance IsGValue Double
+ Data.GI.Base.GValue: instance IsGValue Float
+ Data.GI.Base.GValue: instance IsGValue GType
+ Data.GI.Base.GValue: instance IsGValue Int32
+ Data.GI.Base.GValue: instance IsGValue Int64
+ Data.GI.Base.GValue: instance IsGValue String
+ Data.GI.Base.GValue: instance IsGValue Text
+ Data.GI.Base.GValue: instance IsGValue Word32
+ Data.GI.Base.GValue: instance IsGValue Word64
+ Data.GI.Base.GVariant: instance (Eq key, Eq value) => Eq (GVariantDictEntry key value)
+ Data.GI.Base.GVariant: instance (IsGVariant a, IsGVariant b) => IsGVariant (a, b)
+ Data.GI.Base.GVariant: instance (IsGVariant a, IsGVariant b, IsGVariant c) => IsGVariant (a, b, c)
+ Data.GI.Base.GVariant: instance (IsGVariant a, IsGVariant b, IsGVariant c, IsGVariant d) => IsGVariant (a, b, c, d)
+ Data.GI.Base.GVariant: instance (IsGVariant a, IsGVariant b, IsGVariant c, IsGVariant d, IsGVariant e) => IsGVariant (a, b, c, d, e)
+ Data.GI.Base.GVariant: instance (IsGVariant a, IsGVariantBasicType a, IsGVariant b) => IsGVariant (GVariantDictEntry a b)
+ Data.GI.Base.GVariant: instance (IsGVariant a, IsGVariantBasicType a, IsGVariant b) => IsGVariant (Map a b)
+ Data.GI.Base.GVariant: instance (Show key, Show value) => Show (GVariantDictEntry key value)
+ Data.GI.Base.GVariant: instance Eq GVariantHandle
+ Data.GI.Base.GVariant: instance Eq GVariantObjectPath
+ Data.GI.Base.GVariant: instance Eq GVariantSignature
+ Data.GI.Base.GVariant: instance Eq a => Eq (GVariantSinglet a)
+ Data.GI.Base.GVariant: instance IsGVariant ()
+ Data.GI.Base.GVariant: instance IsGVariant Bool
+ Data.GI.Base.GVariant: instance IsGVariant ByteString
+ Data.GI.Base.GVariant: instance IsGVariant Double
+ Data.GI.Base.GVariant: instance IsGVariant GVariant
+ Data.GI.Base.GVariant: instance IsGVariant GVariantHandle
+ Data.GI.Base.GVariant: instance IsGVariant GVariantObjectPath
+ Data.GI.Base.GVariant: instance IsGVariant GVariantSignature
+ Data.GI.Base.GVariant: instance IsGVariant Int16
+ Data.GI.Base.GVariant: instance IsGVariant Int32
+ Data.GI.Base.GVariant: instance IsGVariant Int64
+ Data.GI.Base.GVariant: instance IsGVariant Text
+ Data.GI.Base.GVariant: instance IsGVariant Word16
+ Data.GI.Base.GVariant: instance IsGVariant Word32
+ Data.GI.Base.GVariant: instance IsGVariant Word64
+ Data.GI.Base.GVariant: instance IsGVariant Word8
+ Data.GI.Base.GVariant: instance IsGVariant a => IsGVariant (GVariantSinglet a)
+ Data.GI.Base.GVariant: instance IsGVariant a => IsGVariant (Maybe a)
+ Data.GI.Base.GVariant: instance IsGVariant a => IsGVariant [a]
+ Data.GI.Base.GVariant: instance IsGVariantBasicType Bool
+ Data.GI.Base.GVariant: instance IsGVariantBasicType Double
+ Data.GI.Base.GVariant: instance IsGVariantBasicType GVariantHandle
+ Data.GI.Base.GVariant: instance IsGVariantBasicType GVariantObjectPath
+ Data.GI.Base.GVariant: instance IsGVariantBasicType GVariantSignature
+ Data.GI.Base.GVariant: instance IsGVariantBasicType Int16
+ Data.GI.Base.GVariant: instance IsGVariantBasicType Int32
+ Data.GI.Base.GVariant: instance IsGVariantBasicType Int64
+ Data.GI.Base.GVariant: instance IsGVariantBasicType Text
+ Data.GI.Base.GVariant: instance IsGVariantBasicType Word16
+ Data.GI.Base.GVariant: instance IsGVariantBasicType Word32
+ Data.GI.Base.GVariant: instance IsGVariantBasicType Word64
+ Data.GI.Base.GVariant: instance IsGVariantBasicType Word8
+ Data.GI.Base.GVariant: instance Ord GVariantHandle
+ Data.GI.Base.GVariant: instance Ord GVariantObjectPath
+ Data.GI.Base.GVariant: instance Ord GVariantSignature
+ Data.GI.Base.GVariant: instance Show GVariantHandle
+ Data.GI.Base.GVariant: instance Show GVariantObjectPath
+ Data.GI.Base.GVariant: instance Show GVariantSignature
+ Data.GI.Base.GVariant: instance Show a => Show (GVariantSinglet a)
+ Data.GI.Base.Overloading: instance (HasAttribute attr o) => HasAttr attr o
+ Data.GI.Base.Properties: instance SignalInfo GObjectNotifySignalInfo
+ Data.GI.Base.Utils: callocMem :: Storable a => IO (Ptr a)
+ Data.GI.Base.Utils: checkUnexpectedReturnNULL :: Text -> Ptr a -> IO ()
- Data.GI.Base.Attributes: get :: (info ~ ResolveAttribute attr obj, AttrInfo info, (AttrBaseTypeConstraint info) obj, AttrOpAllowed AttrGet info) => obj -> proxy (attr :: Symbol) -> IO (AttrGetType info)
+ Data.GI.Base.Attributes: get :: (info ~ ResolveAttribute attr obj, AttrInfo info, (AttrBaseTypeConstraint info) obj, AttrOpAllowed AttrGet info, MonadIO m) => obj -> proxy (attr :: Symbol) -> m (AttrGetType info)
- Data.GI.Base.Attributes: set :: o -> [AttrOp o AttrSet] -> IO ()
+ Data.GI.Base.Attributes: set :: MonadIO m => o -> [AttrOp o AttrSet] -> m ()
- Data.GI.Base.Properties: constructObjectPropertyBoxed :: (BoxedObject a) => String -> a -> IO (String, GValue)
+ Data.GI.Base.Properties: constructObjectPropertyBoxed :: BoxedObject a => String -> a -> IO (String, GValue)
- Data.GI.Base.Properties: new :: GObject o => (ForeignPtr o -> o) -> [AttrOp o AttrConstruct] -> IO o
+ Data.GI.Base.Properties: new :: (GObject o, MonadIO m) => (ForeignPtr o -> o) -> [AttrOp o AttrConstruct] -> m o
- Data.GI.Base.ShortPrelude: class Applicative m => Monad (m :: * -> *)
+ Data.GI.Base.ShortPrelude: class Monad (m :: * -> *)
- Data.GI.Base.ShortPrelude: length :: Foldable t => forall a. t a -> Int
+ Data.GI.Base.ShortPrelude: length :: [a] -> Int
- Data.GI.Base.ShortPrelude: mapM :: Traversable t => forall a (m :: * -> *) b. Monad m => (a -> m b) -> t a -> m (t b)
+ Data.GI.Base.ShortPrelude: mapM :: Monad m => (a -> m b) -> [a] -> m [b]
- Data.GI.Base.ShortPrelude: mapM_ :: (Foldable t, Monad m) => (a -> m b) -> t a -> m ()
+ Data.GI.Base.ShortPrelude: mapM_ :: Monad m => (a -> m b) -> [a] -> m ()
- Data.GI.Base.ShortPrelude: when :: Applicative f => Bool -> f () -> f ()
+ Data.GI.Base.ShortPrelude: when :: Monad m => Bool -> m () -> m ()
- Data.GI.Base.Signals: after :: (GObject o, HasSignal signal o, info ~ ResolveSignal signal o, SignalInfo info, KnownSymbol extra, constraint o) => o -> proxy (signal :: Symbol) (extra :: Symbol) (constraint :: * -> Constraint) -> HaskellCallbackType info -> IO SignalHandlerId
+ Data.GI.Base.Signals: after :: (GObject o, HasSignal signal o, info ~ ResolveSignal signal o, SignalInfo info, KnownSymbol extra, constraint o, MonadIO m) => o -> proxy (signal :: Symbol) (extra :: Symbol) (constraint :: * -> Constraint) -> HaskellCallbackType info -> m SignalHandlerId
- Data.GI.Base.Signals: on :: (GObject o, HasSignal signal o, info ~ ResolveSignal signal o, SignalInfo info, KnownSymbol extra, constraint o) => o -> proxy (signal :: Symbol) (extra :: Symbol) (constraint :: * -> Constraint) -> HaskellCallbackType info -> IO SignalHandlerId
+ Data.GI.Base.Signals: on :: (GObject o, HasSignal signal o, info ~ ResolveSignal signal o, SignalInfo info, KnownSymbol extra, constraint o, MonadIO m) => o -> proxy (signal :: Symbol) (extra :: Symbol) (constraint :: * -> Constraint) -> HaskellCallbackType info -> m SignalHandlerId
Files
- LICENSE +0/−44
- haskell-gi-base.cabal +5/−2
- src/Data/GI/Base/Attributes.hs +8/−6
- src/Data/GI/Base/BasicTypes.hsc +19/−1
- src/Data/GI/Base/Properties.hsc +6/−3
- src/Data/GI/Base/Signals.hsc +10/−8
- src/Data/GI/Base/Utils.hsc +25/−2
LICENSE view
@@ -456,47 +456,3 @@ DAMAGES. END OF TERMS AND CONDITIONS-- How to Apply These Terms to Your New Libraries-- If you develop a new library, and you want it to be of the greatest-possible use to the public, we recommend making it free software that-everyone can redistribute and change. You can do so by permitting-redistribution under these terms (or, alternatively, under the terms of the-ordinary General Public License).-- To apply these terms, attach the following notices to the library. It is-safest to attach them to the start of each source file to most effectively-convey the exclusion of warranty; and each file should have at least the-"copyright" line and a pointer to where the full notice is found.-- <one line to give the library's name and a brief idea of what it does.>- Copyright (C) <year> <name of author>-- This library is free software; you can redistribute it and/or- modify it under the terms of the GNU Lesser General Public- License as published by the Free Software Foundation; either- version 2.1 of the License, or (at your option) any later version.-- This library is distributed in the hope that it will be useful,- but WITHOUT ANY WARRANTY; without even the implied warranty of- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU- Lesser General Public License for more details.-- You should have received a copy of the GNU Lesser General Public- License along with this library; if not, write to the Free Software- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA--Also add information on how to contact you by electronic and paper mail.--You should also get your employer (if you work as a programmer) or your-school, if any, to sign a "copyright disclaimer" for the library, if-necessary. Here is a sample; alter the names:-- Yoyodyne, Inc., hereby disclaims all copyright interest in the- library `Frob' (a library for tweaking knobs) written by James Random Hacker.-- <signature of Ty Coon>, 1 April 1990- Ty Coon, President of Vice--That's all there is to it!
haskell-gi-base.cabal view
@@ -1,5 +1,5 @@ name: haskell-gi-base-version: 0.9+version: 0.10 synopsis: Foundation for libraries generated by haskell-gi description: Foundation for libraries generated by haskell-gi homepage: https://github.com/haskell-gi/haskell-gi-base@@ -39,10 +39,13 @@ Data.GI.Base.Utils pkgconfig-depends: gobject-2.0 >= 2.36- build-depends: base >= 4 && < 5,+ build-depends: base >= 4.7 && < 5, bytestring, containers, text >= 1.0++ if !impl(ghc >= 8.0)+ build-depends: transformers build-tools: hsc2hs extensions: CPP, ForeignFunctionInterface, DoAndIfThenElse
src/Data/GI/Base/Attributes.hs view
@@ -102,6 +102,8 @@ set ) where +import Control.Monad.IO.Class (MonadIO, liftIO)+ import Data.Proxy (Proxy(..)) import Data.GI.Base.GValue (GValue(..))@@ -215,8 +217,8 @@ proxy (attr :: Symbol) -> (obj -> a -> b) -> AttrOp obj tag -- | Set a number of properties for some object.-set :: forall o. o -> [AttrOp o 'AttrSet] -> IO ()-set obj = mapM_ app+set :: forall o m. MonadIO m => o -> [AttrOp o 'AttrSet] -> m ()+set obj = liftIO . mapM_ app where resolve :: proxy attr -> Proxy (ResolveAttribute attr o) resolve _ = Proxy@@ -233,9 +235,9 @@ \v -> attrSet (resolve attr) obj (f obj v) -- | Get the value of an attribute for an object.-get :: forall info attr obj proxy.+get :: forall info attr obj proxy m. (info ~ ResolveAttribute attr obj, AttrInfo info, (AttrBaseTypeConstraint info) obj,- AttrOpAllowed 'AttrGet info) =>- obj -> proxy (attr :: Symbol) -> IO (AttrGetType info)-get o _ = attrGet (Proxy :: Proxy info) o+ AttrOpAllowed 'AttrGet info, MonadIO m) =>+ obj -> proxy (attr :: Symbol) -> m (AttrGetType info)+get o _ = liftIO $ attrGet (Proxy :: Proxy info) o
src/Data/GI/Base/BasicTypes.hsc view
@@ -1,4 +1,5 @@-{-# LANGUAGE ConstraintKinds, FlexibleContexts, FlexibleInstances #-}+{-# LANGUAGE ConstraintKinds, FlexibleContexts, FlexibleInstances,+ DeriveDataTypeable #-} -- | Basic types used in the bindings. module Data.GI.Base.BasicTypes (@@ -28,6 +29,7 @@ , BoxedObject(..) , BoxedEnum(..) , GObject(..)+ , UnexpectedNullPointerReturn(..) -- * Basic GLib \/ GObject types , GVariant(..)@@ -48,7 +50,10 @@ , GDestroyNotify ) where +import Control.Exception (Exception) import Data.Coerce (Coercible)+import qualified Data.Text as T+import Data.Typeable (Typeable) import Data.Word import Foreign.Ptr (Ptr, FunPtr) import Foreign.ForeignPtr (ForeignPtr)@@ -150,6 +155,19 @@ gobjectIsInitiallyUnowned :: a -> Bool -- | The `GType` for this object. gobjectType :: a -> IO GType++-- | A common omission in the introspection data is missing (nullable)+-- annotations for return types, when they clearly are nullable. (A+-- common idiom is "Returns: valid value, or %NULL if something went+-- wrong.")+--+-- Haskell wrappers will raise this exception if the return value is+-- an unexpected `Foreign.Ptr.nullPtr`.+data UnexpectedNullPointerReturn =+ UnexpectedNullPointerReturn { nullPtrErrorMsg :: T.Text }+ deriving (Show, Typeable)++instance Exception UnexpectedNullPointerReturn -- | A <https://developer.gnome.org/glib/stable/glib-GVariant.html GVariant>. See "Data.GI.Base.GVariant" for further methods. newtype GVariant = GVariant (ForeignPtr GVariant)
src/Data/GI/Base/Properties.hsc view
@@ -74,6 +74,7 @@ import Control.Applicative ((<$>)) #endif import Control.Monad ((>=>))+import Control.Monad.IO.Class (MonadIO, liftIO) import qualified Data.ByteString.Char8 as B import Data.Text (Text)@@ -105,9 +106,11 @@ -- | Construct a GObject given the constructor and a list of settable -- attributes. AttrOps are always constructible, so we don't need to -- enforce constraints here.-new :: forall o. GObject o => (ForeignPtr o -> o) ->- [AttrOp o 'AttrConstruct] -> IO o-new constructor attrs = do+new :: forall o m. (GObject o, MonadIO m)+ => (ForeignPtr o -> o)+ -> [AttrOp o 'AttrConstruct]+ -> m o+new constructor attrs = liftIO $ do props <- mapM construct attrs let nprops = length props params <- mallocBytes (nprops*gparameterSize)
src/Data/GI/Base/Signals.hsc view
@@ -17,6 +17,8 @@ SignalInfo(..) ) where +import Control.Monad.IO.Class (MonadIO, liftIO)+ import Foreign import Foreign.C @@ -58,13 +60,13 @@ -- handler is to be run before the default handler. -- -- > on = connectSignal SignalConnectBefore-on :: forall signal extra o info constraint proxy.+on :: forall signal extra o info constraint proxy m. (GObject o, HasSignal signal o, info ~ ResolveSignal signal o, SignalInfo info,- KnownSymbol extra, constraint o) =>+ KnownSymbol extra, constraint o, MonadIO m) => o -> proxy (signal :: Symbol) (extra :: Symbol) (constraint :: * -> Constraint)- -> HaskellCallbackType info -> IO SignalHandlerId-on o p c = connectSignal (resolve p) o c SignalConnectBefore+ -> HaskellCallbackType info -> m SignalHandlerId+on o p c = liftIO $ connectSignal (resolve p) o c SignalConnectBefore where resolve :: proxy signal extra constraint -> SignalProxy (ResolveSignal signal o) extra constraint resolve _ = SignalProxy@@ -72,13 +74,13 @@ -- | Connect a signal to a handler, running the handler after the default one. -- -- > after = connectSignal SignalConnectAfter-after :: forall signal extra o info constraint proxy.+after :: forall signal extra o info constraint proxy m. (GObject o, HasSignal signal o, info ~ ResolveSignal signal o, SignalInfo info,- KnownSymbol extra, constraint o) =>+ KnownSymbol extra, constraint o, MonadIO m) => o -> proxy (signal :: Symbol) (extra :: Symbol) (constraint :: * -> Constraint)- -> HaskellCallbackType info -> IO SignalHandlerId-after o p c = connectSignal (resolve p) o c SignalConnectAfter+ -> HaskellCallbackType info -> m SignalHandlerId+after o p c = liftIO $ connectSignal (resolve p) o c SignalConnectAfter where resolve :: proxy signal extra constraint -> SignalProxy (ResolveSignal signal o) extra constraint resolve _ = SignalProxy
src/Data/GI/Base/Utils.hsc view
@@ -1,4 +1,4 @@-{-# LANGUAGE ScopedTypeVariables, TupleSections #-}+{-# LANGUAGE ScopedTypeVariables, TupleSections, OverloadedStrings #-} {- | Assorted utility functions for bindings. -} module Data.GI.Base.Utils ( whenJust@@ -11,6 +11,7 @@ , convertIfNonNull , callocBytes , callocBoxedBytes+ , callocMem , allocBytes , allocMem , freeMem@@ -19,6 +20,7 @@ , safeFreeFunPtr , safeFreeFunPtrPtr , maybeReleaseFunPtr+ , checkUnexpectedReturnNULL ) where #include <glib-object.h>@@ -26,8 +28,11 @@ #if !MIN_VERSION_base(4,8,0) import Control.Applicative (Applicative, pure, (<$>), (<*>)) #endif+import Control.Exception (throwIO) import Control.Monad (void) +import qualified Data.Text as T+import Data.Monoid ((<>)) import Data.Word import Foreign (peek)@@ -35,7 +40,8 @@ import Foreign.Ptr (Ptr, nullPtr, FunPtr, freeHaskellFunPtr) import Foreign.Storable (Storable(..)) -import Data.GI.Base.BasicTypes (GType(..), CGType, BoxedObject(..))+import Data.GI.Base.BasicTypes (GType(..), CGType, BoxedObject(..),+ UnexpectedNullPointerReturn(..)) -- | When the given value is of "Just a" form, execute the given action, -- otherwise do nothing.@@ -92,6 +98,12 @@ callocBytes :: Int -> IO (Ptr a) callocBytes n = g_malloc0 (fromIntegral n) +-- | Make a zero-filled allocation of enough size to hold the given+-- `Storable` type, using the GLib allocator.+{-# INLINE callocMem #-}+callocMem :: forall a. Storable a => IO (Ptr a)+callocMem = g_malloc0 $ (fromIntegral . sizeOf) (undefined :: a)+ foreign import ccall "g_boxed_copy" g_boxed_copy :: CGType -> Ptr a -> IO (Ptr a) @@ -154,3 +166,14 @@ maybeReleaseFunPtr (Just f) = do peek f >>= freeHaskellFunPtr freeMem f++-- | Check that the given pointer is not NULL. If it is, raise a+-- `UnexpectedNullPointerReturn` exception.+checkUnexpectedReturnNULL :: T.Text -> Ptr a -> IO ()+checkUnexpectedReturnNULL fnName ptr+ | ptr == nullPtr =+ throwIO (UnexpectedNullPointerReturn {+ nullPtrErrorMsg = "Received unexpected nullPtr in \""+ <> fnName <> "\"."+ })+ | otherwise = return ()