
Hello all, Suppose I have a type "Process" which stands either for a Train or a moving Belt. In both cases there is a place of departure and a place of arrival. However the other parameters which describe a Process differ. A Train has departure and arrival times, but a Belt has a speed. I tried the following: type PlaceDep = Int type PlaceArr = Int data Process = Train PlaceDep PlaceArr TP | MovingBelt PlaceDep PlaceArr BP deriving (Eq, Show) data TP = TP Int deriving (Eq, Show) data BP = BP Int deriving (Eq, Show) prc1 = Train 10 11 (TP 1) prc2 = MovingBelt 12 13 (BP 2) What I don't like about this is that the fact that all Processes have PlaceDep and PlaceArr appears somewhat "coincidental". This in contrast, captures the common parts more clearly: type PlaceDep = Int type PlaceArr = Int data ProcessParams = DepartureTime Int | Speed Int deriving (Eq, Show) data Process = Process PlaceDep PlaceArr ProcessParams deriving (Eq, Show) prc1 = Process 10 11 (DepartureTime 1) prc2 = Process 12 13 (Speed 2) Is this the classic way of specializing a type or are there better options See also: http://stackoverflow.com/questions/33156656/subclassing-a-type-in-haskell/33...