Haskell excels at creating reliable software through type checking, declarative programming styles, property testing, limiting mutable state, and more. Nevertheless, it remains difficult to test interactions between Haskell software and complex effectful systems. Outside of Haskell, the tools of choice for this problem are mock frameworks such as gMock for C++ or Mockito for Java.
In part 1 of this talk, we survey the landscape of using mocks for Haskell testing, compare a number of libraries that can be used to solve this problem, and introduce HMock, a new Haskell mock framework with a feature set comparable to best-in-class implementations in mainstream languages. In part 2, we present an experience report with lessons learned and insights from the implementation of HMock as a complex system that uses and interacts with other users of advanced features of GHC and the Haskell type system.