{-# LANGUAGE DeriveGeneric #-}
module Types where

import Data.Hashable
import GHC.Generics (Generic)
import Prelude

data G2 = No | Yes
 deriving (Eq, Ord, Show)

data C1 = The
 deriving (Eq, Ord, Show, Generic)
instance Hashable C1

data C2 = This | That
 deriving (Eq, Ord, Show, Generic)
instance Hashable C2

data SchoolGrade
 = ToReject
 | Insufficient
 | Acceptable
 | Good
 | VeryGood
 | Perfect
 deriving (Bounded, Enum, Eq, Ord, Show)

-- | Note that the grades 1, 2, 4, and 12 are absent.
data DanishSchoolGrade
 = D0  -- ^ the completely unacceptable performance
 | D3  -- ^ the very hesitant, very insufficient, and unsatisfactory performance
 | D5  -- ^ the hesitant and not satisfactory performance
 | D6  -- ^ the just acceptable performance
 | D7  -- ^ the mediocre performance, slightly below average
 | D8  -- ^ the average performance
 | D9  -- ^ the good performance, a little above average
 | D10 -- ^ the excellent but not particularly independent performance
 | D11 -- ^ the independent and excellent performance
 | D13 -- ^ the exceptionally independent and excellent performance
 deriving (Bounded, Enum, Eq, Ord, Show)