
On Mon, Jun 6, 2011 at 01:52, Yitzchak Gale
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