Here's what I've got, which is not compiling:
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
import Data.Text as T
import Data.Int (Int64)
import Control.Lens
type family Incoming validationResult baseType
type instance Incoming Validated baseType = baseType
type instance Incoming ValidationErrors baseType = Either [T.Text] baseType
data Validated
data ValidationErrors
data Tag = Tag {unTag :: T.Text} deriving (Eq, Show)
data NewTag f = NewTag
  {
    ntClientId :: Incoming f Int64
  , ntTag :: Incoming f Tag
  }
$(makeLensesWith abbreviatedFields ''NewTag)
Compilation error:
27   3 error           error:
 • Illegal type synonym family application in instance:
     Incoming f_a1Kvx Int64
 • In the instance declaration for
     ‘HasClientId (NewTag f_a1Kvx) (Incoming f_a1Kvx Int64)’ (intero)
27   3 error           error:
 • Illegal type synonym family application in instance:
     Incoming f_a1Kvx Tag
 • In the instance declaration for
     ‘HasTag (NewTag f_a1Kvx) (Incoming f_a1Kvx Tag)’ (intero)
				
                        
The problem here is that
makeLensesForwill try to generate an instance as follows:This, however, is an error because you cannot create an instance for the result of a type family application. To avoid this, we can write the instance manually for each of the two possible choices for
f: