{-# LANGUAGE GADTs #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE PolyKinds #-}
module Data.GADT.Compare.Extra where

import Data.GADT.Compare ( GOrdering(..) )

fromOrdering :: Ordering -> GOrdering a a
fromOrdering :: forall {k} (a :: k). Ordering -> GOrdering a a
fromOrdering Ordering
ordering = case Ordering
ordering of
    Ordering
LT -> GOrdering a a
forall {k} (a :: k) (b :: k). GOrdering a b
GLT
    Ordering
EQ -> GOrdering a a
forall {k} (a :: k). GOrdering a a
GEQ
    Ordering
GT -> GOrdering a a
forall {k} (a :: k) (b :: k). GOrdering a b
GGT

infixr 3 >>?
(>>?) :: forall k (a :: k) b a' b'. GOrdering a b -> ((a ~ b) => GOrdering a' b') -> GOrdering a' b'
GOrdering a b
GLT >>? :: forall {k} k (a :: k) (b :: k) (a' :: k) (b' :: k).
GOrdering a b -> ((a ~ b) => GOrdering a' b') -> GOrdering a' b'
>>? (a ~ b) => GOrdering a' b'
_ = GOrdering a' b'
forall {k} (a :: k) (b :: k). GOrdering a b
GLT
GOrdering a b
GEQ >>? (a ~ b) => GOrdering a' b'
r = GOrdering a' b'
(a ~ b) => GOrdering a' b'
r
GOrdering a b
GGT >>? (a ~ b) => GOrdering a' b'
_ = GOrdering a' b'
forall {k} (a :: k) (b :: k). GOrdering a b
GGT