haskell ocp framework