
Haskellers, in the following testing code I want to model user selection criterias. Explanation of the requirement: - BasicSelect represents a single value (in the beginning: Number or String) - ExtendedSelect is a single value plus a sign if selection is meant inclusive or exclusive - MultipleSelections is a set of ExtendedSelect's I have some problems with that: - The BasicSelect shall only accept SelectionNum's or SelectionStr's. Currently it accepts anything? - The MultipleSelections shall only accept EmptySel or references to ExtendedSelect's. Can anybody give me a hint how do this? Does this work with plain data types? Hartmut module SelectionCriterias where data InclusiveOrExclusive = Inclusive | Exclusive data BasicSelect a = NumberSelect a | StringSelect a data Num a => NumberSelect a = SelectionNum a data Show a => StringSelect a = SelectionStr a data ExtendedSelect a = ExtendedSelect { basicSel :: BasicSelect a, inclOrExcl :: InclusiveOrExclusive } data MultipleSelections a = EmptySel | SingleSel a | MultipleSel [a] ----------------------------------------------------------------------------- -- Examples/Usage: -- e1 :: BasicSelect Integer e1 = NumberSelect 100 e2 = NumberSelect 110 -- e2 :: BasicSelect [Char] e3 = StringSelect "test3" e4 = StringSelect "test4" e5 = StringSelect "test5" -- f1 :: ExtendedSelect Integer f1 = ExtendedSelect { basicSel = e1, inclOrExcl = Inclusive } f2 = ExtendedSelect { basicSel = e2, inclOrExcl = Exclusive } -- f2 :: ExtendedSelect [Char] f3 = ExtendedSelect { basicSel = e3, inclOrExcl = Exclusive } -- multi1 :: MultipleSelections a multi1 = EmptySel -- multi2 :: MultipleSelections (ExtendedSelect Integer) multi2 = SingleSel f1 -- multi3 :: MultipleSelections (ExtendedSelect Integer) multi3 = MultipleSel [f1,f2] -- e.g. shall not be valid - because Bool not supported multi4 = MultipleSel [True, False]