25.10.2015 Views

Write You a Haskell Stephen Diehl

1kEcQTb

1kEcQTb

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!