Hi Todd,
the problem is, that 'model_of' tries to return different types: Model a, Model (a,a) and Model [a].
I think you have to use some kind of ADT also for the Model, like you already did for ModName.
Something like:
data Model a = Model a
| ProductModel (a,a)
| PowerModel [a]
...
Greetings,
Daniel