inline added
functors!
>> added
guards added
first switch to monad