You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
• Any GHC-specific language extensions.<br />
• Newtypes<br />
• Module namespaces<br />
• Operator parameters<br />
• Defaulting rules<br />
• Exceptions<br />
• Parallelism<br />
• Software Transactional Memory<br />
• Foreign Function Interface<br />
Now if one feels so inclined one could of course implement these features on top our final language, but<br />
they are left as an exercise to the reader!<br />
is of course begs the question of whether or not our language is “a <strong>Haskell</strong>”. In the strictest sense, it<br />
will not be since it doesn’t fully conform to either the <strong>Haskell</strong> 98 or <strong>Haskell</strong> 2010 language specifications.<br />
However in terms of the colloquial usage of the term <strong>Haskell</strong>, there does seem to be some growing feeling<br />
that the “<strong>Haskell</strong> language family” does exist as a definable subset of the functional programming design<br />
space, although many people disagree what its defining features are. In this sense we will most certainly<br />
be writing a language in the <strong>Haskell</strong> family.<br />
Intermediate Forms<br />
e passes between each of the phases make up the main compilation pipeline .<br />
For Proto<strong>Haskell</strong> our pipeline consists of the transitions between four intermediate forms of the program.<br />
• e Source, the textual representation of the program from a file or user input. is is stored in a<br />
Text type.<br />
• e Frontend source, the untyped AST generated from the parser.<br />
• e Core, the explicitly typed, desugared form of the program generated after type inference.<br />
106