Functional Programming for Systems Software: Implementing Baremetal Programs in Habit