{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE UndecidableSuperClasses #-}
module Lawful (Lawful) where
class c t => Lawful c t
instance Lawful Eq Bool
instance Lawful Ord Bool
instance Lawful Eq Int
instance Lawful Ord Int
instance Lawful Eq Integer
instance Lawful Ord Integer
instance Lawful Eq a => Lawful Eq [a]
instance Lawful Ord a => Lawful Ord [a]
instance Lawful Eq a => Lawful Eq (Maybe a)
instance Lawful Ord a => Lawful Ord (Maybe a)
instance (Lawful Eq a, Lawful Eq b) => Lawful Eq (Either a b)
instance (Lawful Ord a, Lawful Ord b) => Lawful Ord (Either a b)