key value haskell domain specific language