[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