{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE DataKinds #-}
module Test.MockCat.Cons ((:>)(..)) 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 :>