X11-extras-0.4: Missing bindings to the X11 graphics librarySource codeContentsIndex
Graphics.X11.Xlib.Extras
Stabilitystable
Contents
Generated by DrIFT : Look, but Don't Touch. *
Description
Synopsis
data Event
= AnyEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
}
| ConfigureRequestEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_parent :: !Window
ev_window :: !Window
ev_x :: !CInt
ev_y :: !CInt
ev_width :: !CInt
ev_height :: !CInt
ev_border_width :: !CInt
ev_above :: !Window
ev_detail :: !NotifyDetail
ev_value_mask :: !CULong
}
| ConfigureEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_event :: !Window
ev_window :: !Window
ev_x :: !CInt
ev_y :: !CInt
ev_width :: !CInt
ev_height :: !CInt
ev_border_width :: !CInt
ev_above :: !Window
ev_override_redirect :: !Bool
}
| MapRequestEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_parent :: !Window
ev_window :: !Window
}
| KeyEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ev_root :: !Window
ev_subwindow :: !Window
ev_time :: !Time
ev_x :: !CInt
ev_y :: !CInt
ev_x_root :: !CInt
ev_y_root :: !CInt
ev_state :: !KeyMask
ev_keycode :: !KeyCode
ev_same_screen :: !Bool
}
| ButtonEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ev_root :: !Window
ev_subwindow :: !Window
ev_time :: !Time
ev_x :: !CInt
ev_y :: !CInt
ev_x_root :: !CInt
ev_y_root :: !CInt
ev_state :: !KeyMask
ev_button :: !Button
ev_same_screen :: !Bool
}
| MotionEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_x :: !CInt
ev_y :: !CInt
ev_window :: !Window
}
| DestroyWindowEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_event :: !Window
ev_window :: !Window
}
| UnmapEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_event :: !Window
ev_window :: !Window
ev_from_configure :: !Bool
}
| MapNotifyEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_event :: !Window
ev_window :: !Window
ev_override_redirect :: !Bool
}
| MappingNotifyEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ev_request :: !MappingRequest
ev_first_keycode :: !KeyCode
ev_count :: !CInt
}
| CrossingEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ev_root :: !Window
ev_subwindow :: !Window
ev_time :: !Time
ev_x :: !CInt
ev_y :: !CInt
ev_x_root :: !CInt
ev_y_root :: !CInt
ev_mode :: !NotifyMode
ev_detail :: !NotifyDetail
ev_same_screen :: !Bool
ev_focus :: !Bool
ev_state :: !Modifier
}
| SelectionRequest {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_owner :: !Window
ev_requestor :: !Window
ev_selection :: !Atom
ev_target :: !Atom
ev_property :: !Atom
ev_time :: !Time
}
| PropertyEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ev_atom :: !Atom
ev_time :: !Time
ev_propstate :: !CInt
}
| ExposeEvent {
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ev_x :: !CInt
ev_y :: !CInt
ev_width :: !CInt
ev_height :: !CInt
ev_count :: !CInt
}
eventName :: Event -> String
getEvent :: XEventPtr -> IO Event
data WindowChanges = WindowChanges {
wc_x :: CInt
wc_y :: CInt
wc_width :: CInt
wc_height :: CInt
wc_border_width :: CInt
wc_sibling :: Window
wc_stack_mode :: CInt
}
none :: XID
anyButton :: Button
anyKey :: KeyCode
currentTime :: Time
xConfigureWindow :: Display -> Window -> CULong -> Ptr WindowChanges -> IO CInt
killClient :: Display -> Window -> IO CInt
configureWindow :: Display -> Window -> CULong -> WindowChanges -> IO ()
xFree :: Ptr a -> IO CInt
xQueryTree :: Display -> Window -> Ptr Window -> Ptr Window -> Ptr (Ptr Window) -> Ptr CInt -> IO Status
queryTree :: Display -> Window -> IO (Window, Window, [Window])
data WindowAttributes = WindowAttributes {
wa_x :: CInt
wa_y :: CInt
wa_width :: CInt
wa_height :: CInt
wa_border_width :: CInt
wa_map_state :: CInt
wa_override_redirect :: Bool
}
waIsUnviewable :: CInt
waIsViewable :: CInt
waIsUnmapped :: CInt
xGetWindowAttributes :: Display -> Window -> Ptr WindowAttributes -> IO Status
changeWindowAttributes :: Display -> Window -> AttributeMask -> Ptr SetWindowAttributes -> IO ()
withServer :: Display -> IO () -> IO ()
data TextProperty = TextProperty {
tp_value :: CString
tp_encoding :: Atom
tp_format :: CInt
tp_nitems :: Word32
}
xGetTextProperty :: Display -> Window -> Ptr TextProperty -> Atom -> IO Status
getTextProperty :: Display -> Window -> Atom -> IO TextProperty
xwcTextPropertyToTextList :: Display -> Ptr TextProperty -> Ptr (Ptr CWString) -> Ptr CInt -> IO CInt
wcTextPropertyToTextList :: Display -> TextProperty -> IO [String]
wcFreeStringList :: Ptr CWString -> IO ()
newtype FontSet = FontSet (Ptr FontSet)
xCreateFontSet :: Display -> CString -> Ptr (Ptr CString) -> Ptr CInt -> Ptr CString -> IO (Ptr FontSet)
createFontSet :: Display -> String -> IO ([String], String, FontSet)
freeStringList :: Ptr CString -> IO ()
freeFontSet :: Display -> FontSet -> IO ()
xwcTextExtents :: FontSet -> CWString -> CInt -> Ptr Rectangle -> Ptr Rectangle -> IO CInt
wcTextExtents :: FontSet -> String -> (Rectangle, Rectangle)
xwcDrawString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> CWString -> CInt -> IO ()
wcDrawString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> String -> IO ()
xwcDrawImageString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> CWString -> CInt -> IO ()
wcDrawImageString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> String -> IO ()
xwcTextEscapement :: FontSet -> CWString -> CInt -> IO Int32
wcTextEscapement :: FontSet -> String -> Int32
xFetchName :: Display -> Window -> Ptr CString -> IO Status
fetchName :: Display -> Window -> IO (Maybe String)
xGetTransientForHint :: Display -> Window -> Ptr Window -> IO Status
getTransientForHint :: Display -> Window -> IO (Maybe Window)
getWMProtocols :: Display -> Window -> IO [Atom]
xGetWMProtocols :: Display -> Window -> Ptr (Ptr Atom) -> Ptr CInt -> IO Status
setEventType :: XEventPtr -> EventType -> IO ()
setSelectionNotify :: XEventPtr -> Window -> Atom -> Atom -> Atom -> Time -> IO ()
setClientMessageEvent :: XEventPtr -> Window -> Atom -> CInt -> Atom -> Time -> IO ()
setConfigureEvent :: XEventPtr -> Window -> Window -> CInt -> CInt -> CInt -> CInt -> CInt -> Window -> Bool -> IO ()
xSetErrorHandler :: IO ()
refreshKeyboardMapping :: Event -> IO ()
xRefreshKeyboardMapping :: Ptr () -> IO CInt
anyPropertyType :: Atom
xChangeProperty :: Display -> Window -> Atom -> Atom -> CInt -> CInt -> Ptr CUChar -> CInt -> IO Status
xGetWindowProperty :: Display -> Window -> Atom -> CLong -> CLong -> Bool -> Atom -> Ptr Atom -> Ptr CInt -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CUChar) -> IO Status
rawGetWindowProperty :: Storable a => Int -> Display -> Atom -> Window -> IO (Maybe [a])
getWindowProperty8 :: Display -> Atom -> Window -> IO (Maybe [Word8])
getWindowProperty16 :: Display -> Atom -> Window -> IO (Maybe [Word16])
getWindowProperty32 :: Display -> Atom -> Window -> IO (Maybe [Word32])
changeProperty8 :: Display -> Window -> Atom -> Atom -> CInt -> [Word8] -> IO ()
changeProperty16 :: Display -> Window -> Atom -> Atom -> CInt -> [Word16] -> IO ()
changeProperty32 :: Display -> Window -> Atom -> Atom -> CInt -> [Word32] -> IO ()
propModePrepend :: CInt
propModeAppend :: CInt
propModeReplace :: CInt
xUnmapWindow :: Display -> Window -> IO CInt
unmapWindow :: Display -> Window -> IO ()
data SizeHints = SizeHints {
sh_min_size :: Maybe (Dimension, Dimension)
sh_max_size :: Maybe (Dimension, Dimension)
sh_resize_inc :: Maybe (Dimension, Dimension)
sh_aspect :: Maybe ((Dimension, Dimension), (Dimension, Dimension))
sh_base_size :: Maybe (Dimension, Dimension)
sh_win_gravity :: Maybe BitGravity
}
xGetWMNormalHints :: Display -> Window -> Ptr SizeHints -> Ptr CLong -> IO Status
getWMNormalHints :: Display -> Window -> IO SizeHints
data ClassHint = ClassHint {
resName :: String
resClass :: String
}
getClassHint :: Display -> Window -> IO ClassHint
xGetClassHint :: Display -> Window -> Ptr ClassHint -> IO Status
isCursorKey :: KeySym -> Bool
isFunctionKey :: KeySym -> Bool
isKeypadKey :: KeySym -> Bool
isMiscFunctionKey :: KeySym -> Bool
isModifierKey :: KeySym -> Bool
isPFKey :: KeySym -> Bool
isPrivateKeypadKey :: KeySym -> Bool
xSetSelectionOwner :: Display -> Atom -> Window -> Time -> IO ()
xGetSelectionOwner :: Display -> Atom -> IO Window
xConvertSelection :: Display -> Atom -> Atom -> Atom -> Window -> Time -> IO ()
Documentation
data Event Source
Constructors
AnyEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ConfigureRequestEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_parent :: !Window
ev_window :: !Window
ev_x :: !CInt
ev_y :: !CInt
ev_width :: !CInt
ev_height :: !CInt
ev_border_width :: !CInt
ev_above :: !Window
ev_detail :: !NotifyDetail
ev_value_mask :: !CULong
ConfigureEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_event :: !Window
ev_window :: !Window
ev_x :: !CInt
ev_y :: !CInt
ev_width :: !CInt
ev_height :: !CInt
ev_border_width :: !CInt
ev_above :: !Window
ev_override_redirect :: !Bool
MapRequestEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_parent :: !Window
ev_window :: !Window
KeyEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ev_root :: !Window
ev_subwindow :: !Window
ev_time :: !Time
ev_x :: !CInt
ev_y :: !CInt
ev_x_root :: !CInt
ev_y_root :: !CInt
ev_state :: !KeyMask
ev_keycode :: !KeyCode
ev_same_screen :: !Bool
ButtonEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ev_root :: !Window
ev_subwindow :: !Window
ev_time :: !Time
ev_x :: !CInt
ev_y :: !CInt
ev_x_root :: !CInt
ev_y_root :: !CInt
ev_state :: !KeyMask
ev_button :: !Button
ev_same_screen :: !Bool
MotionEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_x :: !CInt
ev_y :: !CInt
ev_window :: !Window
DestroyWindowEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_event :: !Window
ev_window :: !Window
UnmapEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_event :: !Window
ev_window :: !Window
ev_from_configure :: !Bool
MapNotifyEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_event :: !Window
ev_window :: !Window
ev_override_redirect :: !Bool
MappingNotifyEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ev_request :: !MappingRequest
ev_first_keycode :: !KeyCode
ev_count :: !CInt
CrossingEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ev_root :: !Window
ev_subwindow :: !Window
ev_time :: !Time
ev_x :: !CInt
ev_y :: !CInt
ev_x_root :: !CInt
ev_y_root :: !CInt
ev_mode :: !NotifyMode
ev_detail :: !NotifyDetail
ev_same_screen :: !Bool
ev_focus :: !Bool
ev_state :: !Modifier
SelectionRequest
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_owner :: !Window
ev_requestor :: !Window
ev_selection :: !Atom
ev_target :: !Atom
ev_property :: !Atom
ev_time :: !Time
PropertyEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ev_atom :: !Atom
ev_time :: !Time
ev_propstate :: !CInt
ExposeEvent
ev_event_type :: !EventType
ev_serial :: !CULong
ev_send_event :: !Bool
ev_event_display :: Display
ev_window :: !Window
ev_x :: !CInt
ev_y :: !CInt
ev_width :: !CInt
ev_height :: !CInt
ev_count :: !CInt
show/hide Instances
eventName :: Event -> StringSource
getEvent :: XEventPtr -> IO EventSource
data WindowChanges Source
Constructors
WindowChanges
wc_x :: CInt
wc_y :: CInt
wc_width :: CInt
wc_height :: CInt
wc_border_width :: CInt
wc_sibling :: Window
wc_stack_mode :: CInt
show/hide Instances
none :: XIDSource
anyButton :: ButtonSource
anyKey :: KeyCodeSource
currentTime :: TimeSource
xConfigureWindow :: Display -> Window -> CULong -> Ptr WindowChanges -> IO CIntSource
killClient :: Display -> Window -> IO CIntSource
configureWindow :: Display -> Window -> CULong -> WindowChanges -> IO ()Source
xFree :: Ptr a -> IO CIntSource
xQueryTree :: Display -> Window -> Ptr Window -> Ptr Window -> Ptr (Ptr Window) -> Ptr CInt -> IO StatusSource
queryTree :: Display -> Window -> IO (Window, Window, [Window])Source
data WindowAttributes Source
Constructors
WindowAttributes
wa_x :: CInt
wa_y :: CInt
wa_width :: CInt
wa_height :: CInt
wa_border_width :: CInt
wa_map_state :: CInt
wa_override_redirect :: Bool
show/hide Instances
waIsUnviewable :: CIntSource
waIsViewable :: CIntSource
waIsUnmapped :: CIntSource
xGetWindowAttributes :: Display -> Window -> Ptr WindowAttributes -> IO StatusSource
changeWindowAttributes :: Display -> Window -> AttributeMask -> Ptr SetWindowAttributes -> IO ()Source
interface to the X11 library function XChangeWindowAttributes().
withServer :: Display -> IO () -> IO ()Source
Run an action with the server
data TextProperty Source
Constructors
TextProperty
tp_value :: CString
tp_encoding :: Atom
tp_format :: CInt
tp_nitems :: Word32
show/hide Instances
xGetTextProperty :: Display -> Window -> Ptr TextProperty -> Atom -> IO StatusSource
getTextProperty :: Display -> Window -> Atom -> IO TextPropertySource
xwcTextPropertyToTextList :: Display -> Ptr TextProperty -> Ptr (Ptr CWString) -> Ptr CInt -> IO CIntSource
wcTextPropertyToTextList :: Display -> TextProperty -> IO [String]Source
wcFreeStringList :: Ptr CWString -> IO ()Source
newtype FontSet Source
Constructors
FontSet (Ptr FontSet)
show/hide Instances
xCreateFontSet :: Display -> CString -> Ptr (Ptr CString) -> Ptr CInt -> Ptr CString -> IO (Ptr FontSet)Source
createFontSet :: Display -> String -> IO ([String], String, FontSet)Source
freeStringList :: Ptr CString -> IO ()Source
freeFontSet :: Display -> FontSet -> IO ()Source
xwcTextExtents :: FontSet -> CWString -> CInt -> Ptr Rectangle -> Ptr Rectangle -> IO CIntSource
wcTextExtents :: FontSet -> String -> (Rectangle, Rectangle)Source
xwcDrawString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> CWString -> CInt -> IO ()Source
wcDrawString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> String -> IO ()Source
xwcDrawImageString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> CWString -> CInt -> IO ()Source
wcDrawImageString :: Display -> Drawable -> FontSet -> GC -> Position -> Position -> String -> IO ()Source
xwcTextEscapement :: FontSet -> CWString -> CInt -> IO Int32Source
wcTextEscapement :: FontSet -> String -> Int32Source
xFetchName :: Display -> Window -> Ptr CString -> IO StatusSource
fetchName :: Display -> Window -> IO (Maybe String)Source
xGetTransientForHint :: Display -> Window -> Ptr Window -> IO StatusSource
getTransientForHint :: Display -> Window -> IO (Maybe Window)Source
getWMProtocols :: Display -> Window -> IO [Atom]Source
The XGetWMProtocols function returns the list of atoms stored in the WM_PROTOCOLS property on the specified win dow. These atoms describe window manager protocols in which the owner of this window is willing to participate. If the property exists, is of type ATOM, is of format 32, and the atom WM_PROTOCOLS can be interned, XGetWMProtocols sets the protocols_return argument to a list of atoms, sets the count_return argument to the number of elements in the list, and returns a nonzero status. Otherwise, it sets neither of the return arguments and returns a zero status. To release the list of atoms, use XFree.
xGetWMProtocols :: Display -> Window -> Ptr (Ptr Atom) -> Ptr CInt -> IO StatusSource
setEventType :: XEventPtr -> EventType -> IO ()Source
setSelectionNotify :: XEventPtr -> Window -> Atom -> Atom -> Atom -> Time -> IO ()Source
setClientMessageEvent :: XEventPtr -> Window -> Atom -> CInt -> Atom -> Time -> IO ()Source
setConfigureEvent :: XEventPtr -> Window -> Window -> CInt -> CInt -> CInt -> CInt -> CInt -> Window -> Bool -> IO ()Source
xSetErrorHandler :: IO ()Source
refreshKeyboardMapping :: Event -> IO ()Source
refreshKeyboardMapping. TODO Remove this binding when the fix has been commited to X11
xRefreshKeyboardMapping :: Ptr () -> IO CIntSource
anyPropertyType :: AtomSource
xChangeProperty :: Display -> Window -> Atom -> Atom -> CInt -> CInt -> Ptr CUChar -> CInt -> IO StatusSource
xGetWindowProperty :: Display -> Window -> Atom -> CLong -> CLong -> Bool -> Atom -> Ptr Atom -> Ptr CInt -> Ptr CULong -> Ptr CULong -> Ptr (Ptr CUChar) -> IO StatusSource
rawGetWindowProperty :: Storable a => Int -> Display -> Atom -> Window -> IO (Maybe [a])Source
getWindowProperty8 :: Display -> Atom -> Window -> IO (Maybe [Word8])Source
getWindowProperty16 :: Display -> Atom -> Window -> IO (Maybe [Word16])Source
getWindowProperty32 :: Display -> Atom -> Window -> IO (Maybe [Word32])Source
changeProperty8 :: Display -> Window -> Atom -> Atom -> CInt -> [Word8] -> IO ()Source
changeProperty16 :: Display -> Window -> Atom -> Atom -> CInt -> [Word16] -> IO ()Source
changeProperty32 :: Display -> Window -> Atom -> Atom -> CInt -> [Word32] -> IO ()Source
propModePrepend :: CIntSource
propModeAppend :: CIntSource
propModeReplace :: CIntSource
xUnmapWindow :: Display -> Window -> IO CIntSource
unmapWindow :: Display -> Window -> IO ()Source
data SizeHints Source
Constructors
SizeHints
sh_min_size :: Maybe (Dimension, Dimension)
sh_max_size :: Maybe (Dimension, Dimension)
sh_resize_inc :: Maybe (Dimension, Dimension)
sh_aspect :: Maybe ((Dimension, Dimension), (Dimension, Dimension))
sh_base_size :: Maybe (Dimension, Dimension)
sh_win_gravity :: Maybe BitGravity
show/hide Instances
xGetWMNormalHints :: Display -> Window -> Ptr SizeHints -> Ptr CLong -> IO StatusSource
getWMNormalHints :: Display -> Window -> IO SizeHintsSource
data ClassHint Source
Constructors
ClassHint
resName :: String
resClass :: String
getClassHint :: Display -> Window -> IO ClassHintSource
xGetClassHint :: Display -> Window -> Ptr ClassHint -> IO StatusSource
isCursorKey :: KeySym -> BoolSource
isFunctionKey :: KeySym -> BoolSource
isKeypadKey :: KeySym -> BoolSource
isMiscFunctionKey :: KeySym -> BoolSource
isModifierKey :: KeySym -> BoolSource
isPFKey :: KeySym -> BoolSource
isPrivateKeypadKey :: KeySym -> BoolSource
Generated by DrIFT : Look, but Don't Touch. *
xSetSelectionOwner :: Display -> Atom -> Window -> Time -> IO ()Source
xGetSelectionOwner :: Display -> Atom -> IO WindowSource
xConvertSelection :: Display -> Atom -> Atom -> Atom -> Window -> Time -> IO ()Source
Produced by Haddock version 2.4.2