How do Haskell programmers debug?
Functional programming is a paradigm that emphasizes avoiding shared mutable state. Compared to imperative programming, which focuses more on how the runtime state should be updated to perform a computation, functional programming adopts a more declarative syntax that highlights what the computation should achieve without involving mutable state. Since functional programming differs from imperative programming, programmers might adopt different debugging strategies in functional programming. However, how programmers debug in functional languages remains under-explored. As an initial step, we interviewed four experienced functional programmers to gain insight into how they debug in Haskell, a popular functional programming language. Our preliminary findings show that while debugging strategies for Haskell are similar to strategies for other languages, some features of Haskell and functional programming introduce challenges to using these debugging strategies. Informed by the findings, we call for future work that gains more understanding of how debugging is done in Haskell and functional programming in general, and explores design opportunities for usable debugging aids in this domain.