
Scott Lawrence wrote:
type Model a = (Ord a) => Set a -- the set of lexemes -> [a] -- the original text to model -> [a] -- list of previous lexemes -> ProbDist a -- the next lexeme
and then
entropy :: Model a -> Set a -> [a] -> Double
or perhaps more simply
entropy :: [a] -> ProbDist a -> Double
Those all look reasonable.
Then in order to get a consistent interface to various models, I'm going to need a typeclass. (Which is required to use a single function name on multiple datatypes, yes?)
Why is it important to use the same function name? If you have two different functions that do two different things, they can have two different names. If further down the line you need to write a function that is independent of the model, the types of its arguments will show you what you need to do.
I suppose the alternative is something like
data Model a = Markov {...} | OtherModel
Is that the functional solution? It seems to preclude the possibility of separating the markov-specialized code and the other specialized code.
Right, it doesn't sound like that's the way to go here. Regards, YItz