For GUI programming I've migrated from the gtk2hs library to the gi-gtk library. This uses overloaded labels to access the properties of GTK3 objects.
I wanted a function which would set the background and foreground colours of a widget. Rather than simply have it modify the object I decided to have it return a list of property setters. It looks like this (the function "contrastText" just returns either white or black):
setColour c = do
bg <- colourToRGBA c
fg <- colourToRGBA $ contrastText c
return [#backgroundRgba := bg, #foregroundRgba := fg]
However when I couldn't get it to type-check I asked ghci what the type should be. Here is the reply!
> :type setColour
setColour
:: (Data.GI.Base.Attributes.AttrOpIsAllowed
tag
(Data.GI.Base.Attributes.AttrAllowedOps
(Data.GI.Base.Overloading.FindElement
"foregroundRgba"
(Data.GI.Base.Overloading.AttributeList obj)
(((('GHC.TypeLits.Text "Unknown attribute \8216"
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "foregroundRgba")
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217 for object \8216")
'GHC.TypeLits.:<>: 'GHC.TypeLits.ShowType obj)
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217.")))
(Data.GI.Base.Attributes.AttrLabel
(Data.GI.Base.Overloading.FindElement
"foregroundRgba"
(Data.GI.Base.Overloading.AttributeList obj)
(((('GHC.TypeLits.Text "Unknown attribute \8216"
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "foregroundRgba")
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217 for object \8216")
'GHC.TypeLits.:<>: 'GHC.TypeLits.ShowType obj)
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217.")))
(Data.GI.Base.Attributes.AttrOrigin
(Data.GI.Base.Overloading.FindElement
"foregroundRgba"
(Data.GI.Base.Overloading.AttributeList obj)
(((('GHC.TypeLits.Text "Unknown attribute \8216"
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "foregroundRgba")
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217 for object \8216")
'GHC.TypeLits.:<>: 'GHC.TypeLits.ShowType obj)
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217.")))
obj
~
'Data.GI.Base.Attributes.OpIsAllowed,
Data.GI.Base.Attributes.AttrOpIsAllowed
tag
(Data.GI.Base.Attributes.AttrAllowedOps
(Data.GI.Base.Overloading.FindElement
"backgroundRgba"
(Data.GI.Base.Overloading.AttributeList obj)
(((('GHC.TypeLits.Text "Unknown attribute \8216"
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "backgroundRgba")
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217 for object \8216")
'GHC.TypeLits.:<>: 'GHC.TypeLits.ShowType obj)
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217.")))
(Data.GI.Base.Attributes.AttrLabel
(Data.GI.Base.Overloading.FindElement
"backgroundRgba"
(Data.GI.Base.Overloading.AttributeList obj)
(((('GHC.TypeLits.Text "Unknown attribute \8216"
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "backgroundRgba")
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217 for object \8216")
'GHC.TypeLits.:<>: 'GHC.TypeLits.ShowType obj)
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217.")))
(Data.GI.Base.Attributes.AttrOrigin
(Data.GI.Base.Overloading.FindElement
"backgroundRgba"
(Data.GI.Base.Overloading.AttributeList obj)
(((('GHC.TypeLits.Text "Unknown attribute \8216"
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "backgroundRgba")
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217 for object \8216")
'GHC.TypeLits.:<>: 'GHC.TypeLits.ShowType obj)
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217.")))
obj
~
'Data.GI.Base.Attributes.OpIsAllowed,
Data.GI.Base.Attributes.AttrInfo
(Data.GI.Base.Overloading.FindElement
"foregroundRgba"
(Data.GI.Base.Overloading.AttributeList obj)
(((('GHC.TypeLits.Text "Unknown attribute \8216"
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "foregroundRgba")
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217 for object \8216")
'GHC.TypeLits.:<>: 'GHC.TypeLits.ShowType obj)
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217.")),
Data.GI.Base.Attributes.AttrInfo
(Data.GI.Base.Overloading.FindElement
"backgroundRgba"
(Data.GI.Base.Overloading.AttributeList obj)
(((('GHC.TypeLits.Text "Unknown attribute \8216"
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "backgroundRgba")
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217 for object \8216")
'GHC.TypeLits.:<>: 'GHC.TypeLits.ShowType obj)
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217.")),
Control.Monad.IO.Class.MonadIO m,
Data.GI.Base.Overloading.HasAttributeList obj,
Data.GI.Base.Attributes.AttrBaseTypeConstraint
(Data.GI.Base.Overloading.FindElement
"backgroundRgba"
(Data.GI.Base.Overloading.AttributeList obj)
(((('GHC.TypeLits.Text "Unknown attribute \8216"
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "backgroundRgba")
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217 for object \8216")
'GHC.TypeLits.:<>: 'GHC.TypeLits.ShowType obj)
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217."))
obj,
Data.GI.Base.Attributes.AttrSetTypeConstraint
(Data.GI.Base.Overloading.FindElement
"backgroundRgba"
(Data.GI.Base.Overloading.AttributeList obj)
(((('GHC.TypeLits.Text "Unknown attribute \8216"
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "backgroundRgba")
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217 for object \8216")
'GHC.TypeLits.:<>: 'GHC.TypeLits.ShowType obj)
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217."))
GI.Gdk.Structs.RGBA.RGBA,
Data.GI.Base.Attributes.AttrBaseTypeConstraint
(Data.GI.Base.Overloading.FindElement
"foregroundRgba"
(Data.GI.Base.Overloading.AttributeList obj)
(((('GHC.TypeLits.Text "Unknown attribute \8216"
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "foregroundRgba")
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217 for object \8216")
'GHC.TypeLits.:<>: 'GHC.TypeLits.ShowType obj)
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217."))
obj,
Data.GI.Base.Attributes.AttrSetTypeConstraint
(Data.GI.Base.Overloading.FindElement
"foregroundRgba"
(Data.GI.Base.Overloading.AttributeList obj)
(((('GHC.TypeLits.Text "Unknown attribute \8216"
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "foregroundRgba")
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217 for object \8216")
'GHC.TypeLits.:<>: 'GHC.TypeLits.ShowType obj)
'GHC.TypeLits.:<>: 'GHC.TypeLits.Text "\8217."))
GI.Gdk.Structs.RGBA.RGBA) =>
Reactive.Banana.Common.Colour
-> m [Data.GI.Base.Attributes.AttrOp obj tag]
No comments:
Post a Comment