Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Here's the Hindley-Milner implementation (in Haskell) from a toy compiler project of mine. It was really enlightening to write it and surprisingly simple.

https://github.com/rikusalminen/funfun/blob/master/FunFun/Ty...

This was also the first time I used monad transformers and almost the first non-IO monad application (I've used ST and Parsec before) I have dealt with. If you compare my code with the book source (Peter Hancock's type checker in Peyton-Jones' "Implementation of Functional Programming Languages", link in source code comment), my version using monads is a lot simpler to follow than the original, written in a pre-Haskell functional programming language called Miranda with no monads.

The type checker is a "pure function", it has inputs and outputs but no side-effects but in the code you need to 1) generate unique "names" 2) bail out early on type errors. I solved this problem using Error and State monads. The Miranda code used an infinite list of numbers for unique names and cumbersome tricks to handle type errors.



Nice job! Seems you could have put the TypeEnv in a ReaderT as well, might make things slightly easier.





Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: