<div dir="ltr"><div><font face="arial, sans-serif"><br></font></div><font face="arial, sans-serif">From this discussion 'Contexts on datatype declarations'</font><div><font face="arial, sans-serif"><a href="http://web.archive.org/web/20151208175102/http://code.haskell.org/~dons/haskell-1990-2000/threads.html#04062">http://web.archive.org/web/20151208175102/http://code.haskell.org/~dons/haskell-1990-2000/threads.html#04062</a><br></font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">It looks like (at least at the time) GHC had separate functions for matching vs building using a constructor.</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">In Hugs, the type for a datatype's constructor(s) is inferred in static.c routine selectCtxt( ) called from depConstrs( ).</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">The type for field (label) selectors is inferred in type.c routine typeSel( ). And it's easy enough to hack that to drop the preds on the selectors, as SPJ advocates in that thread.</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">What I can't find is where Hugs infers the type for a data constructor appearing in matching position.</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Any hints?  Thanks in advance</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">AntC</font></div><div><br></div></div>