[Haskell-cafe] type checking that I can't figure out ...
Ross Mellgren
rmm-haskell at z.odi.ac
Wed Jun 3 17:58:11 EDT 2009
True, so perhaps better written as:
import Data.Maybe (fromMaybe)
gets (fromMaybe (error "could not find re in resFwdMap") . M.lookup
re . resFwdMap)
with more detail in error message as appropriate.
-Ross
On Jun 3, 2009, at 5:57 PM, Henning Thielemann wrote:
> Ross Mellgren schrieb:
>> 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)
>
> fromJust should be avoided, since it is partial and if it results in
> an
> error, the error message points to the implementation of fromJust, not
> its application. Pattern matching is better, but 'maybe' and
> 'fromMaybe'
> are best.
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
More information about the Haskell-Cafe
mailing list