I can define an empty data type in Curry, e.g.:

 

data A

 

The built-in types such as Char, Int and Float are defined this way in the Prelude.  Prior to the introduction of typeclasses the Curry frontend would translate this to a FlatCurry Type with no constructors.  Newer versions produce a type with one constructor named “_Constr#A”.

 

I’d like to understand how to interpret this.  Is the above legal Curry?  Is this perhaps a forward declaration or opaque type?  Can the type, A, be defined later?  If so, would it have to be defined in the same module?  Is this documented somewhere?

 

I’m tempted to reject such a declaration unless the system can find a built-in definition but I don’t want to reject legal programs.

 

-Andy