You've applied two solutions to get the value out -- pattern matching (Just reinfo) and fromJust. You should use one or the other, but not both:

-- pattern matching
remLookupFwd :: (ReVars m t) => SimplRe t -> ReM m t (ReInfo t)
remLookupFwd re
   = do fwd <- gets resFwdMap
let { Just reinfo = M.lookup re fwd } -- PROBLEM
        return reinfo

-- fromJust
remLookupFwd :: (ReVars m t) => SimplRe t -> ReM m t (ReInfo t)
remLookupFwd re
   = do fwd <- gets resFwdMap
let { reinfo = fromJust (M.lookup re fwd) } -- PROBLEM
        return reinfo

BTW, I would personally write this as one line (untested)

gets (fromJust . M.lookup re . resFwdMap)

-Ross

On Jun 3, 2009, at 1:18 PM, Vasili I. Galchin wrote:

Hi Andrew (Bromage),

I reversed the parameter order to Data.Map.lookup and calling fromJust to pull out value from Maybe wrapper ... all as you suggested:

> remLookupFwd :: (ReVars m t) => SimplRe t -> ReM m t (ReInfo t)
> remLookupFwd re
>   = do fwd <- gets resFwdMap
> let { Just reinfo = fromJust(M.lookup re fwd) } -- PROBLEM
>        return reinfo


I am still getting a type mismatch:


Swish\HaskellRDF\Dfa\Dfa.lhs:162:29:
    Couldn't match expected type `Maybe t'
           against inferred type `ReInfo t1'
    In the expression: fromJust (M.lookup re fwd)
    In a pattern binding: Just reinfo = fromJust (M.lookup re fwd)
    In the expression:
        do fwd <- gets resFwdMap
           let Just reinfo = fromJust (M.lookup re fwd)
           return reinfo

Vasili
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to