Parametric polymorphism is needed to implement “Maybe” as a generic type that can be applied to another type, but you can implement individual concrete Maybe X types without it.
You could possibly use macro programming to do it “generically” at a level outside the type system.
You could possibly use macro programming to do it “generically” at a level outside the type system.