[Haskell-cafe] Using type families to define runtime representation and evaluation strategy?