
Hi Günther, Günther Schmidt wrote:
data Container a = Single a | Many a [a] but the problem above
I need a data structure as in my example without the [] being possible to be empty.
So lets write a variant of list which cannot be empty. A usual list is empty, or a head and a tail: data List a = Empty | HeadAndTail a (List a) Now, our kind of list should be just one element, or a head and a tail: data NonEmptyList a = JustOne a | HeadAndNonEmptyTail a (NonEmptyList a) So we can replace [] by NonEmptyList in your definition to get what you want: data Container a = Single a | Many a (NonEmptyList a) However, since Container and NonEmptyList are isomorphic, we can use one instead of the other: data Container a = Single a | Many a (Container a) Whether this is a good idea depends on the purpose of the types, but I guess it is. Tillmann