
11 Nov
2015
11 Nov
'15
4:12 p.m.
I'm starting to get the hang of certain aspects of typeclasses, particularly with Maybe and list types. For instance I needed to write a function as follows: Ord k => k -> Map k [a] -> Maybe a which evaluates to "Nothing" if there is no such key in the map, or Just the first element of [a] if there is such a key, or Nothing if there is such a key but [a] is null. So I could write import qualified Data.Map as M import Control.Monad import Data.Maybe f k m = case M.lookup k m of Nothing -> Nothing Just xs -> listToMaybe xs But the case "Nothing -> Nothing" is suspicious... seems like that's always a clue some typeclass could simplify it. Eventually I figured out f k = join . fmap listToMaybe . M.lookup k