-- | Implement ordered pairs all over again for fun (and to make sure
--- that we can manipulate them algebraically).
+-- that we can manipulate them algebraically). Also require (as
+-- opposed to the built-in ordered pairs) that the elements have
+-- matching types.
--
module TwoTuple
where
data TwoTuple a = TwoTuple a a
- deriving (Eq, Show)
+ deriving (Eq)
+
+instance (Show a) => Show (TwoTuple a) where
+ show (TwoTuple x y) = "(" ++ (show x) ++ ", " ++ (show y) ++ ")"
instance Functor TwoTuple where
f `fmap` (TwoTuple x1 y1) = TwoTuple (f x1) (f y1)