The confusing part of this is there are now two distinct kinds of profiles: the old profiles that you create through about:profiles and the new profiles that you create in this profile switcher, which appear to be nested within the old profile
Haskell practically encourages this style of programming. Any function that touches IO needs to wrap outputs with an appropriate monad. It becomes easier to push all IO out to the edges of your program and keep your core purely functional with no monads
It's a mind-bending language and if you want to experience the feeling of learning programming from the beginning again this would be it