On Mon, Jun 6, 2011 at 01:52, Yitzchak Gale <g...@sefer.org> wrote: > Scott Lawrence wrote: > You almost never want to use UndecidableInstances > when writing practical programs in Haskell.
Ah. That's what I wanted to know :P (Although it does seem to me - from looking around docs and the source - that GHC's rules for allowing certain combinations might be a bit too conservative - but then, I have next to no idea what I'm doing, so hey.) > When GHC tells you that you need them, it almost > always means that your types are poorly designed, > usually due to influence from previous experience > with OOP. * hides behind book > > Your best bet is to step back and think again about > the problem you are trying to solve. What is the > best way to formulate the problem functionally? > That will lead you in the right direction. Please > feel free to share more details about what you are > trying to do. We would be happy to help you work out > some good directions. I'm modelling text in a markov-model-like way. I have an actual markov model (albeit one in which X_n depends on a fixed range X_n-1 .. X-n-k). I'm vaguely anticipating the presence of other models: class Model m a | m -> a where lexemes :: m -> Set a genFunc :: m -> [a] -> ProbDist a Having that working, I'm trying to estimate the information entropy of a model entropy :: (Model m) => m -> Double (This is a slight simplification, since entropy needs a second argument "precision" to know when to terminate.) Which works well and fine - this function is pretty trivial to implement, on the assumption that Markov (the instance of Model described above) implements genFunc properly. But it happens not to - the array argument to genFunc must be the right size, otherwise an even probability distribution is used. So my OOP-infected mind wants to specialize 'entropy' for Markov: class Entropy d where entropy :: d -> Double -- again, simplified Note that it's not (Entropy d a) because the type of the lexeme doesn't matter. Now, the problem code instance (Model m a) => Entropy m where entropy = undefined As you might have picked up, I suspect the part where I want to specialize entropy for Markov is where I mess up - but I'm not sure what to do. (To be clear, I expect to want to specialize entropy for other models too - the general function I have in mind would be horribly slow for many reasonable models.) Thanks. > > Regards, > Yitz > -- Scott Lawrence _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe