[Haskell-beginners] Expected / Inferred mis-match and confused!
daniel.is.fischer at googlemail.com
Thu Jun 9 18:55:06 CEST 2011
On Thursday 09 June 2011, 18:26:18, Sean Charles wrote:
> Here are the snippets of my code currently hurting my coding ulcer...
> routes :: [Record] -> IO ()
> routes legodata = do
> let all = foldl forwardRoutes M.empty legodata -- [Record]
> return ()
> forwardRoutes :: M.Map String [String] -> Record -> M.Map String
> forwardRoutes map row =
> let key = row !! 0 in
> let val = row !! 1 in
> case lookup key map of
Ah, that needs to be M.lookup, without qualifying the call, it refers to
Prelude.lookup :: Eq a => a -> [(a,b)] -> Maybe b
> Nothing -> M.insert key [val] map
> Just routes -> M.insert key val:routes map
This needs parentheses, M.insert key (val:routes) map
> I have spent a long time searching and reading and trying to fathom it
> out from first principles but I cannot for the life of me figure out
> where '[(Field, b)]' is coming from!
Prelude.lookup vs. Data.Map.lookup
> I can smell Field in there because
> Record is typed as [Field], but a tuple? And what is 'b' ?
> The 'inferred type' matches what I thought it should be in the error
> message and I am right (I think) in stating that the 'expected type' is
> what it actually got from the code at compile time?!
More information about the Beginners