{-# OPTIONS_HADDOCK show-extensions #-}
{-# LANGUAGE BangPatterns, FlexibleContexts #-}
module Phonetic.Languages.Basis where
data Result t a b c = R {Result t a b c -> t a
line :: !(t a), Result t a b c -> b
propertiesF :: !b, Result t a b c -> c
transPropertiesF :: !c} deriving Result t a b c -> Result t a b c -> Bool
(Result t a b c -> Result t a b c -> Bool)
-> (Result t a b c -> Result t a b c -> Bool)
-> Eq (Result t a b c)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall (t :: * -> *) a b c.
(Eq b, Eq c, Eq (t a)) =>
Result t a b c -> Result t a b c -> Bool
/= :: Result t a b c -> Result t a b c -> Bool
$c/= :: forall (t :: * -> *) a b c.
(Eq b, Eq c, Eq (t a)) =>
Result t a b c -> Result t a b c -> Bool
== :: Result t a b c -> Result t a b c -> Bool
$c== :: forall (t :: * -> *) a b c.
(Eq b, Eq c, Eq (t a)) =>
Result t a b c -> Result t a b c -> Bool
Eq
instance (Ord (t a), Ord b, Ord c) => Ord (Result t a b c) where
compare :: Result t a b c -> Result t a b c -> Ordering
compare Result t a b c
x Result t a b c
y
= case c -> c -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Result t a b c -> c
forall (t :: * -> *) a b c. Result t a b c -> c
transPropertiesF Result t a b c
x) (Result t a b c -> c
forall (t :: * -> *) a b c. Result t a b c -> c
transPropertiesF Result t a b c
y) of
!Ordering
EQ -> case b -> b -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Result t a b c -> b
forall (t :: * -> *) a b c. Result t a b c -> b
propertiesF Result t a b c
x) (Result t a b c -> b
forall (t :: * -> *) a b c. Result t a b c -> b
propertiesF Result t a b c
y) of
!Ordering
EQ -> t a -> t a -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Result t a b c -> t a
forall (t :: * -> *) a b c. Result t a b c -> t a
line Result t a b c
x) (Result t a b c -> t a
forall (t :: * -> *) a b c. Result t a b c -> t a
line Result t a b c
y)
!Ordering
z -> Ordering
z
!Ordering
z0 -> Ordering
z0
{-# INLINE compare #-}
data FuncRep2 a b c = D { FuncRep2 a b c -> a -> b
getAB :: (a -> b), FuncRep2 a b c -> b -> c
getBC :: (b -> c) }
getAC :: FuncRep2 a b c -> (a -> c)
getAC :: FuncRep2 a b c -> a -> c
getAC (D a -> b
f b -> c
g) = b -> c
g (b -> c) -> (a -> b) -> a -> c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> b
f
{-# INLINE getAC #-}
data Result2 a b c = R2 {Result2 a b c -> a
line2 :: !a, Result2 a b c -> b
propertiesF2 :: !b, Result2 a b c -> c
transPropertiesF2 :: !c} deriving Result2 a b c -> Result2 a b c -> Bool
(Result2 a b c -> Result2 a b c -> Bool)
-> (Result2 a b c -> Result2 a b c -> Bool) -> Eq (Result2 a b c)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall a b c.
(Eq a, Eq b, Eq c) =>
Result2 a b c -> Result2 a b c -> Bool
/= :: Result2 a b c -> Result2 a b c -> Bool
$c/= :: forall a b c.
(Eq a, Eq b, Eq c) =>
Result2 a b c -> Result2 a b c -> Bool
== :: Result2 a b c -> Result2 a b c -> Bool
$c== :: forall a b c.
(Eq a, Eq b, Eq c) =>
Result2 a b c -> Result2 a b c -> Bool
Eq
instance (Ord a, Ord b, Ord c) => Ord (Result2 a b c) where
compare :: Result2 a b c -> Result2 a b c -> Ordering
compare Result2 a b c
x Result2 a b c
y
= case c -> c -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Result2 a b c -> c
forall a b c. Result2 a b c -> c
transPropertiesF2 Result2 a b c
x) (Result2 a b c -> c
forall a b c. Result2 a b c -> c
transPropertiesF2 Result2 a b c
y) of
!Ordering
EQ -> case b -> b -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Result2 a b c -> b
forall a b c. Result2 a b c -> b
propertiesF2 Result2 a b c
x) (Result2 a b c -> b
forall a b c. Result2 a b c -> b
propertiesF2 Result2 a b c
y) of
!Ordering
EQ -> a -> a -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (Result2 a b c -> a
forall a b c. Result2 a b c -> a
line2 Result2 a b c
x) (Result2 a b c -> a
forall a b c. Result2 a b c -> a
line2 Result2 a b c
y)
!Ordering
z -> Ordering
z
!Ordering
z0 -> Ordering
z0
{-# INLINE compare #-}