Hi Tillmann,
thank you for the elaborate example. This is exactly what it took for me
to realize that you and Jake have indeed given me the solution that I need.
I had a very hard time getting my head around it, but to my defense I'm
usually working on this stuff in the wee hours. :)
Günther
Tillmann Rendel schrieb:
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
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe