On Fri, 2011-04-22 at 21:26 +0200, Henning Thielemann wrote:
> On Fri, 22 Apr 2011, Christopher Done wrote:
> 
> > Use of Fantom's save invoke and Maybe are more or less the same.
> > 
> > -- Hard way
> > email = if userList /= Nothing
> >            then let user = findUser "bob" (fromJust userList)
> >                 in if user /= Nothing
> >                       then getEmail (fromJust user)
> >                       else Nothing
> >            else Nothing
> 
> In idiomatic Haskell you would write
> 
> case userList of
>     Nothing -> Nothing
>     Just plainUserList =
>        let user = findUser "bob" plainUserList
>        ...
> 
> since (userList /= Nothing) requires an Eq instance without need and it 
> requires fromJust. Or was there an educational purpose to write it with 
> (/= Nothing) ?

Using 'more advanced haskell'

email = getEmail =<< findUser "bob" =<< userList

or

email = do ul <- userList
           user <- findUser "bob" ul
           getEmail user

Regards

PS. If you worried what is (=<<) it is generalised maybe (i.e. if you
observe maybe, concatMap etc. follow similar pattern - it turns out it
is common pattern and it is worth to be generalised).

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to