haskell Haskell 98 pointed and copointed data