Thanks, it did! (For the record, here is a paraphrase of what first confused me -- undefined was not the problem).
> enumerateMethodNames :: [String] > enumerateMethodNames = map fst methodsNoConstr > --enumerateMethodNames = map fst methodsConstr > > methodsConstr :: (Ord a) => [(String, [a] -> Int)] > methodsConstr = [ ("method", methodConstr )] > where methodConstr :: (Ord a) => [a] -> Int > methodConstr xs = length . sort $ xs > > > methodsNoConstr :: [(String, [a] -> Int)] > methodsNoConstr = [ ("method", methodNoConstr )] > where methodNoConstr :: [a] -> Int > methodNoConstr = length > > > --First enumerateMethodNames works as expected, second does not compile. 2010/3/4 Ryan Ingram <ryani.s...@gmail.com> > Perhaps this thought exercise will make things clear: > > > class Show a => Foo a where > > toFoo :: String -> a > > > foos :: (Foo a) => [(String, a)] > > foos = map (\f -> (show f, f)) [toFoo "a", toFoo "b", toFoo "c"] > > > data Foo1 = Foo1 > > instance Show Foo1 where show _ = "1" > > instance Foo Foo1 where toFoo _ = Foo1 > > data Foo2 = Foo2 > > instance Show Foo2 where show _ = "2" > > instance Foo Foo2 where toFoo _ = Foo2 > > > exercise :: [String] > > exercise = map fst foos > > Exercise for the reader: what should the contents of "exercise" be? > > Keep in mind that your question is exactly the same as this one, from > the compiler's point of view. > > -- ryan > > On Wed, Mar 3, 2010 at 10:48 PM, Marcus Uneson <marcus.une...@gmail.com> > wrote: > > Thanks. I realize there are many ways to make it compile. > > However, I am trying to understand the mechanism behind -- > > why does the first example compile and what constraints does > > enumerateMethodNames add on a (which it does not inspect)? >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe