Now I have....
module Main where
data SquareType numberType = Num numberType => SquareConstructor
numberType
This is a valid declaration, but I don't think it does what you want it to. The constraint on numberType applies only to the data constructor.
That is, given an unknown value of type SquareType a for some a, we do not have enough information to infer Num a.
For your code, you want something like:
instance (Num a) => ShapeInterface (SquareType a) where
area (SquareConstructor side) = side * side