[Haskell-beginners] joining lists sharing multiple type classes

Christopher Howard christopher.howard at frigidcode.com
Fri Aug 31 21:34:40 CEST 2012

Hi. I've got two data structures, Star and Asteroid (eventually I'll
make more) that both belong to the following type classes: Locatable,
and Animation. I wanted to do something like so in part of the code:

let stars = ... in      -- of type [Star]
let asteroids = ... in  -- of type [Asteroid]
let visibleObjects = do visibleObject <- (stars ++ asteroids)
                        ... -- prep each object for graphics system
                            -- using funcs from both type classes
... -- feed visibleObjects to graphics system

However, this does not work because the two lists are not automatically
downgraded when joined together by (++). The compiler complains about
"asteroids" not being of type [Star]. What is the simplest way to do
what I am trying to do? I tried this, but I think my syntax is off:

let visibleObjects =
  do visibleObject <- ((stars :: [(Locatable a, Animation a) => a)
                      ++ (asteroids :: [(Locatable a, Animation a) => a)

Compiler complains about "Illegal polymorphic or qualified type".


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 554 bytes
Desc: OpenPGP digital signature
URL: <http://www.haskell.org/pipermail/beginners/attachments/20120831/4861e910/attachment.pgp>

More information about the Beginners mailing list