
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).