Main point: One reason to not use external libraries is based on the learning outcome of the task.

This is one of the persistent questions when developing software. When should we get an external library to solve problems and when should we write the functionality ourselves. The answer has many facets: What is the security requirement, does it add or reduce complexity, does it pose a recruitment risk, and, in my case, the goal of writing software.

I have recently started to implement my own Haskell library to do probabilistic programming and explore data. There already exists a couple of alternatives though I still insist on making my own. The main reason is that I am working with the cores of probabilistic programming and need to develop my abstract understanding of the field rather than a concrete competence to use a tool. I opt-in for the abstract understanding as professional opportunities within Haskell are scarce (even more so in Scandinavia) and I can therefore leverage the abstract understanding cross-technology better.

Had this project been developed in a language like Java or C# then it would probably have been wiser to focus on the problem domain, like how to analyze specific data, and defer the development of the tools. In particular, because it is easier to leverage tool competencies professionally writing in these languages.