Add `{-# MINIMAL #-}` annotations to typeclasses
authorHerbert Valerio Riedel <hvr@gnu.org>
Wed, 18 Sep 2013 08:45:38 +0000 (10:45 +0200)
committerHerbert Valerio Riedel <hvr@gnu.org>
Wed, 18 Sep 2013 08:45:38 +0000 (10:45 +0200)
This makes use of the new `{-# MINIMAL #-}` facility (see #7633)
for the following typeclasses

 - `Bits`
 - `Foldable`
 - `Fractional`
 - `Num`
 - `MonadZip`
 - `Read`
 - `Show`
 - `Storable`
 - `Traversable`

Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Control/Monad/Zip.hs
Data/Bits.hs
Data/Foldable.hs
Data/Traversable.hs
Foreign/Storable.hs
GHC/Num.lhs
GHC/Read.lhs
GHC/Real.lhs
GHC/Show.lhs

index 824e373..ec13eed 100644 (file)
@@ -47,6 +47,7 @@ class Monad m => MonadZip m where
     -- munzip is a member of the class because sometimes
     -- you can implement it more efficiently than the
     -- above default code.  See Trac #4370 comment by giorgidze
+    {-# MINIMAL mzip | mzipWith #-}
 
 instance MonadZip [] where
     mzip     = zip
index e2eb3fe..76af67b 100644 (file)
@@ -239,6 +239,11 @@ class Eq a => Bits a where
         known as the population count or the Hamming weight. -}
     popCount          :: a -> Int
 
+    {-# MINIMAL (.&.), (.|.), xor, complement,
+                (shift | (shiftL, shiftR)),
+                (rotate | (rotateL, rotateR)),
+                bitSize, bitSizeMaybe, isSigned, testBit, bit, popCount #-}
+
 class Bits b => FiniteBits b where
     finiteBitSize :: b -> Int
 
index de6c056..e61972d 100644 (file)
@@ -151,6 +151,7 @@ class Foldable t where
       where
         mf Nothing y = Just y
         mf (Just x) y = Just (f x y)
+    {-# MINIMAL foldMap | foldr #-}
 
 -- instances for Prelude types
 
index 7872a61..5fa91e8 100644 (file)
@@ -164,6 +164,7 @@ class (Functor t, Foldable t) => Traversable t where
     -- and collect the results.
     sequence :: Monad m => t (m a) -> m (t a)
     sequence = mapM id
+    {-# MINIMAL traverse | sequenceA #-}
 
 -- instances for Prelude types
 
index 86e65f8..7441741 100644 (file)
@@ -149,6 +149,10 @@ class Storable a where
    peek ptr = peekElemOff ptr 0
    poke ptr = pokeElemOff ptr 0
 
+   {-# MINIMAL sizeOf, alignment,
+               (peek | peekElemOff | peekByteOff),
+               (poke | pokeElemOff | pokeByteOff) #-}
+
 -- System-dependent, but rather obvious instances
 
 instance Storable Bool where
index 689fafc..7cfc377 100644 (file)
@@ -63,6 +63,7 @@ class  Num a  where
     {-# INLINE negate #-}
     x - y               = x + negate y
     negate x            = 0 - x
+    {-# MINIMAL (+), (*), abs, signum, fromInteger, (negate | (-)) #-}
 
 -- | the same as @'flip' ('-')@.
 --
index 05ee4f9..a8494be 100644 (file)
@@ -206,6 +206,7 @@ class Read a where
   readList     = readPrec_to_S (list readPrec) 0
   readPrec     = readS_to_Prec readsPrec
   readListPrec = readS_to_Prec (\_ -> readList)
+  {-# MINIMAL readsPrec | readPrec #-}
 
 readListDefault :: Read a => ReadS [a]
 -- ^ A possible replacement definition for the 'readList' method (GHC only).
index 1d53637..5cb79de 100644 (file)
@@ -192,6 +192,7 @@ class  (Num a) => Fractional a  where
     {-# INLINE (/) #-}
     recip x             =  1 / x
     x / y               = x * recip y
+    {-# MINIMAL fromRational, (recip | (/)) #-}
 
 -- | Extracting components of fractions.
 --
index 3f31e38..bce3e73 100644 (file)
@@ -157,6 +157,7 @@ class  Show a  where
     showsPrec _ x s = show x ++ s
     show x          = shows x ""
     showList ls   s = showList__ shows ls s
+    {-# MINIMAL showsPrec | show #-}
 
 showList__ :: (a -> ShowS) ->  [a] -> ShowS
 showList__ _     []     s = "[]" ++ s