
On Sat, 03 Jul 2010 12:48:56 -0700, Dan Doel
Then the instance declares infinitely many instances C Bool a a. This is a violation of the fundep. Based on your error message, it looks like it ends up treating the instance as the first concrete 'a' it comes across, but who knows?
Hmmm.. it doesn't look like a first concrete lockdown. The following works fine: opres1 :: Int -> Int opres1 = op True opres2 :: String -> String opres2 = op True main = do putStrLn $ op True "start" putStrLn $ show $ opres1 5 putStrLn $ opres2 $ opres2 $ show $ opres1 6 putStrLn $ opres2 "done" As a side note, although I agree it abuses the fundeps intent, it was handy for the specific purpose I was implementing to have a "no-op/passthrough" instance of op. In general I like the typedef approach better, but it looks like I must sacrifice the no-op to make that switch. -- -KQ