module Text.Name ( Name (..) ) where data Name a = Name { lastName :: !a , firstName :: !a , middleName :: !(Maybe a) } deriving (Eq, Foldable, Functor, Generic, Ord, Show, Traversable) instance Applicative Name where pure x = Name x x (pure x) Name l f m <*> Name x y z = Name (l x) (f y) (m <*> z)