<div dir="ltr"><div>Personally I'd try to use the type system, if possible.<br><br>data Box a = Box [a]<br>data Parcel a = Parcel [a]<br>data Can = Can<br><br><br>data Truck a = Truck {<br>  tname :: String,<br>  truckContents :: [a]<br>}<br><br>oneboxoftwocanstruck :: Truck (Box Can)<br>oneboxoftwocanstruck = Truck "Truck of Boxes of Cans" [Box [Can,Can]]<br><br>onecantruck :: Truck Can<br>onecantruck = Truck "Truck of Cans" [Can]<br><br></div>This gets some of the type safety without bogging you down too much.  You can still end up with parcels with trucks in them, but it's not too bad.  At least cans are just cans, and functions can be written for trucks that only work on trucks, for example.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 21, 2015 at 4:40 AM, martin <span dir="ltr"><<a href="mailto:martin.drautzburg@web.de" target="_blank">martin.drautzburg@web.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello all,<br>
<br>
I was trying to model things which can contain other things. This is easy as long as containers and the contained items<br>
all can be described in the same fashion. However when I want to model - say -<br>
<br>
        trucks<br>
        containing boxes<br>
                containing parcels<br>
                        containing cans<br>
<br>
and trucks, boxes, parcels and cans are not of the same type, then this nested thing will become a type in its own right<br>
and it will be of a different type than trucks containing cans (which are not wrappen in parcels ...)<br>
<br>
As long as I can squeeze trucks, boxes ... into one type, possibly by using a "container_type" attribute, there is no<br>
problem. Is this the only way to do this? Is there an idiom?<br>
<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</blockquote></div><br></div>