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)