Hi edgar,
the whole of my code and the input data are one contained world, I am not using mondas - as I don't understand them properly, and they seem not to be necessary for the simple algebra I am trying to develop. Do I really need to use them here?

Now, to your example:
>>>Try for example in ghci: fromJust $ Just 1 >>= (\x -> return $ x + 1)
(I also had to search for definition of the $ operator, totally avoided in the two books I have, and seems to be just syntactic sugar instead of parentheses. Argh.)

this seems to be equivalent to fromJust (Just 1), where I would assuem a result of 1. But the example seems to be dependent on whatever x is entered by keyboard. Am I right?

Cheers
Martin

On 9/21/2010 3:19 PM, edgar klerks wrote:
Also note that Maybe is a monad. So you don't have to use pattern matching.

You have to import the Data.Maybe to get the functions in the scope.

On Tue, Sep 21, 2010 at 3:15 PM, edgar klerks <edgar.klerks@gmail.com> wrote:
Hello Martin,

You have two options. You can use fromJust :: Maybe a -> a, which is a partial function, so it can fail if the supplied value is Nothing and gives a hard to track down exception.

Or you can use fromMaybe :: a -> Maybe a -> a,  which returns a default a in case Maybe a = Nothing and a if Maybe a = Just a.

There is also a third: maybe :: b -> (a -> b) -> Maybe a -> b, which can be useful in the last step of some chain of functions. Note that fromMaybe is just (flip maybe id).

Greets,

Edgar

On Tue, Sep 21, 2010 at 3:05 PM, Martin Tomko <martin.tomko@geo.uzh.ch> wrote:
Dear All,
as a newbie, I am only just discovering some intricacies of haskell.
I have a Data.Map map, and am trying the lookup function to get the value for a given key (it is a list in my case, btw). I am struggling to get access to the value, as it is constructed using Just. I know that the question is therefore more general then the application on Map, so I would be glad to get a wider picture. I Checked in Real World Haskell, btu did nto find and answer. In Haskell the craft of... I found the following (p263):

mapValue :: (a->b)-> Maybe a -> Maybe b
mapValue g (Just a) = Just (g a)
mapValue g Nothing = Nothing

Which is fine, but it makes the Just constructor travel through the whole code, which is annoying. Is there a way out? Or would that be a dirty hack?

I do not quite understand the following discussion of maybe (p263-4), but it seems like the code suggested is able to return a value at the end...

Thanks
Martin

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners