Allow refinement types to act as factory and be instantiated in different circumstances with varying parameters.
# define as
type GreaterThan<a>(x :: a) := [y ~ a | y > x]
# use as
GreaterThan<Number>(5)
Can only be instantiated with literals.
Also allow instantiated parametric types on the right hand side.