Lava: Hardware Design in Haskell
Monads for functional programming