{-# LANGUAGE DeriveFoldable, DeriveFunctor, DeriveTraversable, TypeFamilies, TemplateHaskell #-}