Obtain also type signature for worker from type signature

olaf: Thu Feb 13 18:05:55 CET 2003 Update of /usr/src/master/nhc/src/hat/trans In directory hinken:/tmp/cvs-serv5827/src/hat/trans Modified Files: AuxFile.hs AuxLabelAST.hs AuxTypes.hs TraceId.hs TraceTrans.hs Log Message: Obtain also type signature for worker from type signature for a function. Type signatures for workers are needed after introduction of the known-arity optimisation. The known-arity optimisation requires that workers of functions with known arity are defined on the same level as their wrapper, not local to them. If the original function was recursive, the worker will be recursive instead of calling the wrapper (as without known-arity opt.). Hence if the original definition had a type signature, then the worker needs a type signature as well (the wrapper gets one anyway), because otherwise its inferred type might not be general enough (polymorphic recursion) or too general (type class ambiguities, problems with existential types). Transformation of the original type signature into the worker type signature is not uniform: function types are handled specially. So if the type includes a type synonym it may not be possible to use the transformed type synonym, but the original one has to be expanded and transformed in this non-uniform way. However, in general a type synonym cannot be expanded, because the rhs might not be in scope at the synonym use site. Hence a type synonym is split into an outer part consisting of function types,type applications and type variables, which can and may need to be expanded, and several inner type parts, for which new helper type synonyms are defined. These are always ex- and imported with the type synonym itself. A lot of effort, but it does work in the end.
participants (1)
-
olaf@sparud.net