{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE DataKinds #-}
module Test.MockCat.Cons ((:>)(..), Head(..)) where
data a :> b = a :> b
instance (Show a, Show b) => Show (a :> b) where
show :: (a :> b) -> String
show (a
a :> b
b) = a -> String
forall a. Show a => a -> String
show a
a String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
"," String -> ShowS
forall a. Semigroup a => a -> a -> a
<> b -> String
forall a. Show a => a -> String
show b
b
instance (Eq a, Eq b) => Eq (a :> b) where
(a
a :> b
b) == :: (a :> b) -> (a :> b) -> Bool
== (a
a2 :> b
b2) = (a
a a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
a2) Bool -> Bool -> Bool
&& (b
b b -> b -> Bool
forall a. Eq a => a -> a -> Bool
== b
b2)
infixr 8 :>
data Head = Head
deriving (Head -> Head -> Bool
(Head -> Head -> Bool) -> (Head -> Head -> Bool) -> Eq Head
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Head -> Head -> Bool
== :: Head -> Head -> Bool
$c/= :: Head -> Head -> Bool
/= :: Head -> Head -> Bool
Eq, Int -> Head -> ShowS
[Head] -> ShowS
Head -> String
(Int -> Head -> ShowS)
-> (Head -> String) -> ([Head] -> ShowS) -> Show Head
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Head -> ShowS
showsPrec :: Int -> Head -> ShowS
$cshow :: Head -> String
show :: Head -> String
$cshowList :: [Head] -> ShowS
showList :: [Head] -> ShowS
Show)