[GHC] #2309: containers: specialize functions that fail in a Monad to Maybe

GHC trac at galois.com
Sat May 24 19:56:44 EDT 2008


#2309: containers: specialize functions that fail in a Monad to Maybe
-------------------------+--------------------------------------------------
    Reporter:  ross      |       Owner:                   
        Type:  proposal  |      Status:  new              
    Priority:  normal    |   Component:  libraries (other)
     Version:  6.8.2     |    Severity:  normal           
    Keywords:            |    Testcase:                   
Architecture:  Unknown   |          Os:  Unknown          
-------------------------+--------------------------------------------------
 Several functions on containers used to have types like
 {{{
 lookup :: (Ord k) => k -> Map k a -> Maybe a
 }}}
 but these were generalized to
 {{{
 lookup :: (Monad m, Ord k) => k -> Map k a -> m a
 }}}
 The only methods of `Monad` used are `return` and `fail`.  The problem is
 that, depending on the monad, `fail` can be an ordinary value or a runtime
 error: this device makes it harder to check whether a program is safe,
 because it hides possible runtime errors among testable conditions.

 The proposal is to change these signatures back, specializing them to
 `Maybe`.

 The functions involved are:
 {{{
 lookup :: Ord k => k -> Map k a -> Maybe a
 lookupIndex :: Ord k => k -> Map k a -> Maybe Int
 minViewWithKey :: Map k a -> Maybe ((k,a), Map k a)
 maxViewWithKey :: Map k a -> Maybe ((k,a), Map k a)
 minView :: Map k a -> Maybe (a, Map k a)
 maxView :: Map k a -> Maybe (a, Map k a)

 lookup :: Key -> IntMap a -> Maybe a
 maxViewWithKey :: IntMap a -> Maybe ((Key, a), IntMap a)
 minViewWithKey :: IntMap a -> Maybe ((Key, a), IntMap a)
 maxView :: IntMap a -> Maybe (a, IntMap a)
 minView :: IntMap a -> Maybe (a, IntMap a)

 minView :: Set a -> Maybe (a, Set a)
 maxView :: Set a -> Maybe (a, Set a)

 maxView :: IntSet -> Maybe (Int, IntSet)
 minView :: IntSet -> Maybe (Int, IntSet)
 }}}
 No information is lost, because in each case there is a single failure
 mode.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/2309>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the Glasgow-haskell-bugs mailing list