
On Mon, 2007-09-10 at 18:40 +0200, Sven Panne wrote:
Type classes might be used to get a slightly smaller API, but I am unsure about the performance impact and how much this would really buy us in terms of the ease of use of the API.
There shouldn't be any problem w.r.t. performance, the compiler can specialize and inline. What's the problem with reading custom data? data MP3 = MP3 { ... } instance Binary MP3 where get = MP3 <$> getHeader <*> getData -- [*] where getHeader = do magic <- getWord32le case magic of ... ... put = ... to read a (IEEE) double you use do x <- (get :: Double); ... but most of the time the right type will be inferred from the context. If there are serious performance problems it'd could probably be attacked using some more use of inline declarations or maybe use of compiler rewrite rules (in the library). I don't expect things to work as smoothly as they maybe could (the package is in version 0.3), but so far things don't seem too bad. Did you do any benchmarks? / Thomas [*] .. note that <$> .. <*> is just a more convenient way of writing: do hdr <- getHeader dat <- getData return (MP3 hdr dat) Those operators live in Control.Applicative and are included in recent versions of the 'base' package. (