[Haskell-cafe] (no subject)

Brent Yorgey byorgey at seas.upenn.edu
Mon Nov 28 23:48:58 CET 2011


On Mon, Nov 28, 2011 at 04:20:54PM -0600, Antoine Latter wrote:
> On Mon, Nov 28, 2011 at 4:12 PM, Willem Obbens <dubl-u at hotmail.com> wrote:
> > Hello,
> > I get this error when I try to derive an instance of the Show typeclass:
> > Abc.hs:21:60:
> >     Couldn't match expected type `Vector' with actual type `[Point]'
> >     In the first argument of `show'', namely `xs'
> >     In the second argument of `(++)', namely `show' xs'
> >     In the second argument of `(++)', namely `", " ++ show' xs'
> > Failed, modules loaded: none.
> > Here's the faulty code:
> > newtype Point = Point Int
> > instance Show Point where
> >    show (Point a) = [chr $ a + 48]
> >
> > data Vector = Vector [Point]
> > instance Show Vector where
> >    show (Vector ys) =
> >       let show' (Vector [z])     = show z
> >           show' (Vector (x:xs))  = show x ++ ", " ++ show' xs
> >           show' (Vector [])      = []
> >       in  "(" ++ show' ys ++ ")"

You've made  show' :: Vector -> String, but I'm guessing you actually
want to make it  show' :: [Point] -> String; i.e. get rid of the
Vector constructors in the show' patterns.

-Brent



More information about the Haskell-Cafe mailing list