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)?
cheers, Marcus 2010/3/4 Rahul Kapoor <[email protected]> > > methods :: (Eq a) => [(String, a)] > > methods = > > [ ("method1", undefined ) > > , ("method2", undefined) > > ] > > > > enumerateMethodNames :: [String] > > enumerateMethodNames = map fst methods > > The above does not compile because the source does not have > enough information for GHC to determine what actual types to use > for "methods" since undefined can stand in as values for any > type. The program will compile if you use actual values instead > of undefined or supply an explicit type signature. > > for example: > > enumerateMethodNames = map fst (methods :: [(String, String)]) > or > methods :: [(String, SomeEqType)] > > > Rahul >
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
