module ClassRecord where import Control.DeepSeq (NFData, rnf) import Control.Applicative (Applicative, pure, (<*>)) import qualified Data.Traversable as Trav import qualified Data.Foldable as Fold import Data.Traversable (Traversable, traverse) import Data.Foldable (Foldable, foldMap) {- | Columns in the generated spreadsheet tables are sorted according to the order of the record fields. -} data T a = Cons { advertisement, rasping, chirping, ticking, growling :: a } names :: T String names = Cons "Advertisement" "Rasping" "Chirping" "Ticking" "Growling" instance NFData a => NFData (T a) where rnf = rnf . Fold.toList instance Functor T where fmap = Trav.fmapDefault instance Foldable T where foldMap = Trav.foldMapDefault instance Traversable T where traverse f (Cons xAdvertisement xRasping xChirping xTicking xGrowling) = pure Cons <*> f xAdvertisement <*> f xRasping <*> f xChirping <*> f xTicking <*> f xGrowling instance Applicative T where pure a = Cons a a a a a Cons fAdvertisement fRasping fChirping fTicking fGrowling <*> Cons xAdvertisement xRasping xChirping xTicking xGrowling = Cons (fAdvertisement xAdvertisement) (fRasping xRasping) (fChirping xChirping) (fTicking xTicking) (fGrowling xGrowling)