'família de tipos' vs 'família de dados', em resumo?

Estou confuso sobre como escolher entredata family etype family. A página wiki emTipoFamílias entra em muitos detalhes. Ocasionalmente, refere-se informalmente aodata family como uma "família de tipo" em prosa, mas é claro que também hátype family em Haskell.

Há um exemplo simples que mostra onde duas versões do código são mostradas, diferindo apenas se umadata family ou umtype family está sendo declarado:

-- BAD: f is too ambiguous, due to non-injectivity
-- type family F a

-- OK
data family F a 

f :: F a -> F a
f = undefined

g :: F Int -> F Int
g x = f x

type edata aqui têm o mesmo significado, mas otype family versão falhar na verificação de tipo, enquanto odata family versão está bem, porquedata family "cria novos tipos e é, portanto, injetável" (diz a página da wiki).

Meu argumento de tudo isso é "tentardata family para casos simples e, se não for suficientemente poderoso, tentetype family". O que é legal, mas eu gostaria de entender melhor. Existe um diagrama de Venn ou uma árvore de decisão que eu possa seguir para distinguir quando usar qual?

questionAnswers(2)

yourAnswerToTheQuestion