hashmap-throw (empty) → 0.1.0.0
raw patch · 5 files changed
+90/−0 lines, 5 filesdep +basedep +exceptionsdep +hashable
Dependencies added: base, exceptions, hashable, hashmap
Files
- ChangeLog.md +5/−0
- LICENSE +19/−0
- README.md +3/−0
- hashmap-throw.cabal +34/−0
- src/Data/HashMap/Throw.hs +29/−0
+ ChangeLog.md view
@@ -0,0 +1,5 @@+# Changelog for hashmap-throw++# v0.1.0.0++* Add `lookupOrThrow` function for throwing from a hashmap.
+ LICENSE view
@@ -0,0 +1,19 @@+Copyright (c) 2020 Daniel Firth++Permission is hereby granted, free of charge, to any person obtaining a copy+of this software and associated documentation files (the "Software"), to deal+in the Software without restriction, including without limitation the rights+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+copies of the Software, and to permit persons to whom the Software is+furnished to do so, subject to the following conditions:++The above copyright notice and this permission notice shall be included in all+copies or substantial portions of the Software.++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE+SOFTWARE.
+ README.md view
@@ -0,0 +1,3 @@+# hashmap-throw++`MonadThrow` variant of `Data.HashMap.lookup`.
+ hashmap-throw.cabal view
@@ -0,0 +1,34 @@+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.34.2.+--+-- see: https://github.com/sol/hpack++name: hashmap-throw+version: 0.1.0.0+synopsis: Throw behaviour for hashmap lookup.+description: Adds a lookupOrThrow function that throws if the key is not found+category: Data structures+author: Daniel Firth+maintainer: dan.firth@homotopic.tech+copyright: 2020 Daniel Firth+license: MIT+license-file: LICENSE+build-type: Simple+extra-source-files:+ README.md+ ChangeLog.md++library+ exposed-modules:+ Data.HashMap.Throw+ other-modules:+ Paths_hashmap_throw+ hs-source-dirs:+ src+ build-depends:+ base >=4.7 && <5+ , exceptions+ , hashable+ , hashmap+ default-language: Haskell2010
+ src/Data/HashMap/Throw.hs view
@@ -0,0 +1,29 @@+{- |+ Module : Data.HashMap.Throw+ License : MIT+ Stability : experimental++lookupOrThrow function for HashMap.+-}+{-# OPTIONS_GHC -fno-warn-deprecations #-}+module Data.HashMap.Throw (+ lookupOrThrow+, KeyNotFoundException(..)+) where++import Control.Monad.Catch+import Data.Typeable+import Data.Hashable+import Data.HashMap as HM++-- | Exception thrown when a key is not found in a hashmap.+newtype KeyNotFoundException a = KeyNotFoundException a+ deriving (Eq, Ord, Show)++instance (Typeable a, Show a) => Exception (KeyNotFoundException a)++-- | `HM.lookup` lifted to `MonadThrow` that throws `KeyNotFoundException`.+lookupOrThrow :: (Eq a, Ord a, Show a, Typeable a, Hashable a, MonadThrow m) => a -> HashMap a b -> m b+lookupOrThrow k m = case HM.lookup k m of+ Just x -> return x+ Nothing -> throwM $ KeyNotFoundException k