A vine data type in Haskell