class AwsType a where
    toText :: a -> b


    {-# MINIMAL toText #-}

class Minimal a where
  toText :: a -> b
  {-# MINIMAL decimal, hexadecimal, realFloat, scientific #-}

class Minimal a where
  toText :: a -> b
  {-# MINIMAL shape, (maskedIndex | maskedLinearIndex) #-}

class Minimal a where
  toText :: a -> b
  {-# MINIMAL (toSample | toSamples) #-}

class ManyOps a where
    aOp :: a -> a -> Bool
    bOp :: a -> a -> Bool
    cOp :: a -> a -> Bool
    dOp :: a -> a -> Bool
    eOp :: a -> a -> Bool
    fOp :: a -> a -> Bool
    {-# MINIMAL  ( aOp)
               | ( bOp   , cOp)
               | ((dOp  |  eOp) , fOp)
      #-}

class Foo a where
    bar :: a -> a -> Bool
    foo :: a -> a -> Bool
    baq :: a -> a -> Bool
    baz :: a -> a -> Bool
    quux :: a -> a -> Bool
    {-# MINIMAL bar, (foo, baq | foo, quux) #-}

class Foo2 a where
  f :: a
  {-# MiNiMaL f #-}
