My aim is to create a language specific to the scientific field (which would be used mainly in the field of machine learning and physics) which would be based on the functional paradigm, a paradigm which seems to me to be perfect for data analysis and processing.
Ideally and in theory, this would imply that there would be no side effects. However, the DSL must nevertheless offer the possibility of processing data in real time, representing and adjusting it on a scalable graph, communicating with external devices or servers, or even more common tasks such as reading a file or writing to the terminal.
Personally, I appreciate the functional paradigm very much, but it becomes relatively complex to use for the purposes mentioned, especially if the language is intended for non-computer specialists whose objective is to be able to manipulate data without worrying about the functioning of the tools they use (they nevertheless have sufficient minimal training).
I therefore have a design question for this DSL concerning its purely functional nature. The question could be resolved fairly quickly by quoting for example a language from the ML family (such as F# or OCaml), which sacrifice a little purity in favour of a more user-friendly interface that is easy to understand and use.
On the other hand, there are languages such as Haskell where this style of problem invokes a certain "monadic complexity" in the management of edge effects.
I'm not looking for the complexity of Haskell for this DSL, but the ML style prevents, or makes complicated, certain tasks that are easily possible in Haskell thanks to the edge effect framing, the purity and the lazy evaluation (and I find that cleaner too, but it's subjective).
Thus, I am curious as to the in-between that would be possible in a DSL with the uses mentioned. So my question is, which design(s) for a functional language that is "as pure as possible" are best suited to meet the style of the problems stated?