Here we summarise aspects of Green Card that are less than ideal, and indicate possible improvements.
Pretty much every newtype or
single-constructor declaration that is involved in a foreign language
call needs a corresponding %dis definition. Maybe this %dis
definition should be automated. On the other hand, there are many
fewer data types than procedures, so perhaps it isn't too big a burden
to define a %dis for each.
Alternatively, Green Card could also generate the Haskell type
from a %dis definition, along the lines of what %enum
already does.
The error handling provided by %fail is
fairly rudimentary. It isn't obvious how to improve it in a
systematic manner.