packages feed

reflex-gi-gtk-0.2.0.0: src/Reflex/GI/Gtk/Widget/Ord.hs

-- This Source Code Form is subject to the terms of the Mozilla Public
-- License, v. 2.0. If a copy of the MPL was not distributed with this
-- file, You can obtain one at https://mozilla.org/MPL/2.0/.

module Reflex.GI.Gtk.Widget.Ord
  ( OrdWidget(..)
  ) where

import Data.Coerce (coerce)
import Data.Function (on)
import Data.GI.Base ( GObject
                    , ManagedPtr(managedForeignPtr)
                    )
import Foreign.ForeignPtr (ForeignPtr)

newtype OrdWidget w = OrdWidget
  { fromOrdWidget :: w
  }
  deriving (Eq)

foreignPtrFromWidget :: (GObject w) => w -> ForeignPtr ()
foreignPtrFromWidget = managedForeignPtr . coerce

foreignPtrFromOrdWidget :: (GObject w) => OrdWidget w -> ForeignPtr ()
foreignPtrFromOrdWidget (OrdWidget w) = foreignPtrFromWidget w

instance (GObject w, Eq w) => Ord (OrdWidget w) where
  compare = compare `on` foreignPtrFromOrdWidget
  (<) = (<) `on` foreignPtrFromOrdWidget
  (<=) = (<=) `on` foreignPtrFromOrdWidget
  (>) = (>) `on` foreignPtrFromOrdWidget
  (>=) = (>=) `on` foreignPtrFromOrdWidget