I've done something perhaps similar in that I have a couple of signal types, backed by (X, Y) vectors with Y values of different types, but the same X type. So they can share a fair amount of implementation that depends only on X. Still more could be shared if I could know a "zero" value for each Y, so I wrote a SignalBase module: class (Eq y) => Y y where zero_y :: y -- anything else that lets you share code class (Storable.Storable (X, y), Y y) => Signal y type SigVec y = V.Vector (X, y) Now the SignalBase functions take '(Signal y) => SigVec y'. The specific signals contain a SigVec, and the functions whose implementations can be shared are just one line: at :: X -> Signal y -> Y at x sig = SignalBase.at x (sig_vec sig) The 'y' parameter to Signal is unrelated, I use it for a phantom type to distinguish between signals of the same implementation but different logical meaning, but 'at' applies to all of them. On Thu, Jun 16, 2011 at 2:16 PM, gutti <philipp.guttenberg@gmx.net> wrote:
Hi David,
thanks for the links. I had a lok at the OO-paper some time ago already, heard however that its quite unusual and rather tricky to do OO-style programming in Haskell. So I'm looking for suggestions how to tackle this problem in a functional way.
Cheers Phil
-- View this message in context: http://haskell.1045720.n5.nabble.com/Data-Type-Inheritance-ala-OO-Inheritenc... Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe