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

Reply via email to