Using Control.Lens library :-)
Minor changes...
Using liftIO, Applicative and additional minor changes...