|
Re: Union Types for Haskell!?: msg#00084lang.haskell.general
Hi Christian, Your suggestion is of course possible. However, it imposes an overhead which I would like to avoid. Consider you have a data structure (e.g. an abstract syntax tree) consisting of nodes belonging to different data types. The difficulty is to write a function that abstracts from the traversal of that tree. I.e. try to write a map and a filter function on such data structures (what's the type of the function argument to map/filter?). In using a discriminated union type as you propose, one solution would be to traverse the data structure once and generate for each node a corresponding "tagged" node (a B becomes an UB B etc.). The result can then be mapped over or filtered by a function of type A -> A or A -> [A]. Finally, the result has again to be untagged to get a structure of the original types. Creating the tagged variant from the beginning is undesirable because this would lead to less type safety in the construction and node-specific manipulation of the data structure. These disadvantages could be avoided when (undiscriminated) union types were allowed. Bernd Christian Lescher wrote: > > Hi Bernd, > > > data B = ... > > data C = ... > > type A = B | C | D -- A accepts values of either B or C or D (cf. the > > "Either a" type in the Prelude) > > What about the construction of a union type in Haskell like this?: > > data B = B1 | B2 > data C = C1 | C2 | C3 > data D = D1 | D2 > data A = UB B | UC C | UD D -- here's the union type > > For instance a list of type [A] may look like this: [UB B1,UC C2,UC C1,UD D1] > > Christian > > _______________________________________________ > Haskell mailing list > Haskell@xxxxxxxxxxx > http://www.haskell.org/mailman/listinfo/haskell |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | MBR'01 Deadline extension: 00084, Lorenzo Magnani |
|---|---|
| Next by Date: | Re: Union Types for Haskell!?: 00084, Bernd Holzmüller |
| Previous by Thread: | Re: Union Types for Haskell!?i: 00084, Christian Lescher |
| Next by Thread: | Re: Union Types for Haskell!?: 00084, Marcin 'Qrczak' Kowalczyk |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |