Inspired by a Next Level MTL - George Wilson - BFPG 2016-06 talk and by Keynote from Lennart Augustsson - Giving Haskell Types to a Relational Algebra Library in C++
From
dashboardData :: Manager -> GitHubAuth -> YSState
-> IO $ Either (Either GitHubError YSError) $ Vector (GitHubUser, YSUser)
dashboardData = {- eight lines of boilerplate #-}
to
dashboardData''' :: (MonadGitHub m, MonadYS m) => m (Vector (GitHubUser, YSUser))
dashboardData''' = mergeUsers <$> getGitHubUsers <*> getYsUsers
or something with even more general implementation.