Hi all! How can we model in Haskell three hypothetic data structures
A, B, C which obey following conditions:
1. A is anything
2. B is list of A's
3. C is list of A's or B's or another C's
So, for example, it would be possible to write something like: C [A, B
[A, A], A, C [A, B [A]]].
I wrote this code:
data Super = A | B [A] | C[Super]
Not surprisingly, Haskell refused to accept subexpression `B[A]`,
because "Not in scope: type constructor or class `A'". How to solve
this problem?
More "real" example of A, B and C:
data Shape = Point Int Int | Polyline [Point] | Shape [Shape]
Interestingly, if I replace Polyline [Point] to Polyline [Shape] then
definition will be accepted. But what if I want *polylines* consists
of *points*, not any *shapes*?
Thank you!
--
Nikolay Artamonov