Am Freitag, 13. Februar 2009 20:06 schrieb Jonathan Cast: > On Fri, 2009-02-13 at 20:06 +0100, Daniel Fischer wrote: > > Am Freitag, 13. Februar 2009 19:49 schrieb Jonathan Cast: > > > It breaks type inference. I explained this at the time. I can explain > > > it again: > > > > > > import Data.List > > > import Data.Set > > > import Data.Map > > > > > > warmFuzzyThingFirstOperation = map > > > > > > This gives an error currently. Quite properly. But if *any* use of > > > `map' type-checks, with those imports, why on earth should this > > > one fail? > > > > To do justice to the above proposal, in that situation more than one > > choice would typecheck (were the other imports absent or qualified), so > > that should also be rejected according to it. > > Yeah, my objection is precisely that this trivial example is rejected. > If this use of map is rejected, then I claim *every* use of map should > be rejected. > Okay, why? If warmFuzzyThingFirstOperation were accepted, it would have the type
(forall a b. (a -> b) -> [a] -> [b]) \/ (forall k a b. Ord k => (a -> b) -> Map k a -> Map k b) \/ (forall a b. (Ord a, Ord b) => (a -> b) -> Set a -> Set b) Looks kind of ambiguous, doesn't it? I would rather not allow that. But if we have take 5 (map (const True) [0,1,1,2,3,5,8,13,21,34,55]) we can infer that the 'map' used here must have a type unifyable with Num a => (b -> Bool) -> [a] -> [c] and only one of the 'map's in scope has such a type, so we must pick that. Doesn't look sooo evil at first. However, let us remove some information, what about take 5 . map (const True) ? Well, still easy, we must unify with (a -> b) -> c -> [d], only one possibility, fine. Or is it? What if we have another 'take' in scope? Say take :: Int -> Set a -> Set a ? Oops. So, where draw the line? > jcc Bottom line, allowing that sort of overloading would at least be very ad-hoccish, and probably a bad thing. Thanks, Daniel _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe