EdisonAPI 1.3.1 → 1.3.3
raw patch · 6 files changed
+49/−27 lines, 6 filesdep +faildep ~basePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: fail
Dependency ranges changed: base
API changes (from Hackage documentation)
+ Data.Edison.Prelude: instance Control.Monad.Fail.MonadFail Data.Edison.Prelude.Fail
+ Data.Edison.Prelude: instance GHC.Base.Applicative Data.Edison.Prelude.Fail
+ Data.Edison.Prelude: instance GHC.Base.Functor Data.Edison.Prelude.Fail
+ Data.Edison.Prelude: instance GHC.Base.Monad Data.Edison.Prelude.Fail
+ Data.Edison.Prelude: runFail_ :: Fail a -> a
- Data.Edison.Assoc: lookupAndDeleteM :: (AssocX m k, Monad rm) => k -> m a -> rm (a, m a)
+ Data.Edison.Assoc: lookupAndDeleteM :: (AssocX m k, MonadFail rm) => k -> m a -> rm (a, m a)
- Data.Edison.Assoc: lookupM :: (AssocX m k, Monad rm) => k -> m a -> rm a
+ Data.Edison.Assoc: lookupM :: (AssocX m k, MonadFail rm) => k -> m a -> rm a
- Data.Edison.Assoc: maxView :: (OrdAssocX m k, Monad rm) => m a -> rm (a, m a)
+ Data.Edison.Assoc: maxView :: (OrdAssocX m k, MonadFail rm) => m a -> rm (a, m a)
- Data.Edison.Assoc: maxViewWithKey :: (OrdAssoc m k, Monad rm) => m a -> rm ((k, a), m a)
+ Data.Edison.Assoc: maxViewWithKey :: (OrdAssoc m k, MonadFail rm) => m a -> rm ((k, a), m a)
- Data.Edison.Assoc: minView :: (OrdAssocX m k, Monad rm) => m a -> rm (a, m a)
+ Data.Edison.Assoc: minView :: (OrdAssocX m k, MonadFail rm) => m a -> rm (a, m a)
- Data.Edison.Assoc: minViewWithKey :: (OrdAssoc m k, Monad rm) => m a -> rm ((k, a), m a)
+ Data.Edison.Assoc: minViewWithKey :: (OrdAssoc m k, MonadFail rm) => m a -> rm ((k, a), m a)
- Data.Edison.Coll: lookupM :: (Coll c a, Monad m) => a -> c -> m a
+ Data.Edison.Coll: lookupM :: (Coll c a, MonadFail m) => a -> c -> m a
- Data.Edison.Coll: maxView :: (OrdColl c a, Monad m) => c -> m (a, c)
+ Data.Edison.Coll: maxView :: (OrdColl c a, MonadFail m) => c -> m (a, c)
- Data.Edison.Coll: minView :: (OrdColl c a, Monad m) => c -> m (a, c)
+ Data.Edison.Coll: minView :: (OrdColl c a, MonadFail m) => c -> m (a, c)
- Data.Edison.Coll: unionSeqWith :: (Set c a, Sequence seq) => (a -> a -> a) -> seq (c) -> c
+ Data.Edison.Coll: unionSeqWith :: (Set c a, Sequence seq) => (a -> a -> a) -> seq c -> c
- Data.Edison.Coll.Utils: map :: (Coll cin a, CollX cout b) => (a -> b) -> (cin -> cout)
+ Data.Edison.Coll.Utils: map :: (Coll cin a, CollX cout b) => (a -> b) -> cin -> cout
- Data.Edison.Coll.Utils: mapPartial :: (Coll cin a, CollX cout b) => (a -> Maybe b) -> (cin -> cout)
+ Data.Edison.Coll.Utils: mapPartial :: (Coll cin a, CollX cout b) => (a -> Maybe b) -> cin -> cout
- Data.Edison.Coll.Utils: unionMap :: (Coll cin a, CollX cout b) => (a -> cout) -> (cin -> cout)
+ Data.Edison.Coll.Utils: unionMap :: (Coll cin a, CollX cout b) => (a -> cout) -> cin -> cout
- Data.Edison.Coll.Utils: unsafeMapMonotonic :: (OrdColl cin a, OrdCollX cout b) => (a -> b) -> (cin -> cout)
+ Data.Edison.Coll.Utils: unsafeMapMonotonic :: (OrdColl cin a, OrdCollX cout b) => (a -> b) -> cin -> cout
- Data.Edison.Seq: lheadM :: (Sequence s, Monad m) => s a -> m a
+ Data.Edison.Seq: lheadM :: (Sequence s, MonadFail m) => s a -> m a
- Data.Edison.Seq: lookupM :: (Sequence s, Monad m) => Int -> s a -> m a
+ Data.Edison.Seq: lookupM :: (Sequence s, MonadFail m) => Int -> s a -> m a
- Data.Edison.Seq: ltailM :: (Sequence s, Monad m) => s a -> m (s a)
+ Data.Edison.Seq: ltailM :: (Sequence s, MonadFail m) => s a -> m (s a)
- Data.Edison.Seq: lview :: (Sequence s, Monad m) => s a -> m (a, s a)
+ Data.Edison.Seq: lview :: (Sequence s, MonadFail m) => s a -> m (a, s a)
- Data.Edison.Seq: rheadM :: (Sequence s, Monad m) => s a -> m a
+ Data.Edison.Seq: rheadM :: (Sequence s, MonadFail m) => s a -> m a
- Data.Edison.Seq: rtailM :: (Sequence s, Monad m) => s a -> m (s a)
+ Data.Edison.Seq: rtailM :: (Sequence s, MonadFail m) => s a -> m (s a)
- Data.Edison.Seq: rview :: (Sequence s, Monad m) => s a -> m (a, s a)
+ Data.Edison.Seq: rview :: (Sequence s, MonadFail m) => s a -> m (a, s a)
- Data.Edison.Seq.ListSeq: foldr1' :: (t -> t -> t) -> [t] -> t
+ Data.Edison.Seq.ListSeq: foldr1' :: (a -> a -> a) -> [a] -> a
- Data.Edison.Seq.ListSeq: foldrWithIndex' :: (Num t2, Enum t2) => (t2 -> t1 -> t -> t) -> t -> [t1] -> t
+ Data.Edison.Seq.ListSeq: foldrWithIndex' :: (Num t, Enum t) => (t -> t -> a -> a) -> a -> [t] -> a
- Data.Edison.Seq.ListSeq: lheadM :: (Monad rm) => [a] -> rm a
+ Data.Edison.Seq.ListSeq: lheadM :: MonadFail rm => [a] -> rm a
- Data.Edison.Seq.ListSeq: lookupM :: (Monad m) => Int -> [a] -> m a
+ Data.Edison.Seq.ListSeq: lookupM :: MonadFail m => Int -> [a] -> m a
- Data.Edison.Seq.ListSeq: ltailM :: (Monad rm) => [a] -> rm [a]
+ Data.Edison.Seq.ListSeq: ltailM :: MonadFail rm => [a] -> rm [a]
- Data.Edison.Seq.ListSeq: lview :: (Monad rm) => [a] -> rm (a, [a])
+ Data.Edison.Seq.ListSeq: lview :: MonadFail rm => [a] -> rm (a, [a])
- Data.Edison.Seq.ListSeq: rheadM :: (Monad rm) => [a] -> rm a
+ Data.Edison.Seq.ListSeq: rheadM :: MonadFail rm => [a] -> rm a
- Data.Edison.Seq.ListSeq: rtailM :: (Monad rm) => [a] -> rm [a]
+ Data.Edison.Seq.ListSeq: rtailM :: MonadFail rm => [a] -> rm [a]
- Data.Edison.Seq.ListSeq: rview :: (Monad rm) => [a] -> rm (a, [a])
+ Data.Edison.Seq.ListSeq: rview :: MonadFail rm => [a] -> rm (a, [a])
Files
- EdisonAPI.cabal +3/−1
- src/Data/Edison/Assoc.hs +8/−6
- src/Data/Edison/Coll.hs +4/−3
- src/Data/Edison/Prelude.hs +16/−0
- src/Data/Edison/Seq.hs +8/−7
- src/Data/Edison/Seq/ListSeq.hs +10/−10
EdisonAPI.cabal view
@@ -1,7 +1,7 @@ Build-type: Simple Name: EdisonAPI Cabal-Version: >= 1.10-Version: 1.3.1+Version: 1.3.3 License: MIT License-File: COPYRIGHT Author: Chris Okasaki@@ -40,6 +40,8 @@ Build-Depends: base == 4.*, mtl >= 1.0+ if impl(ghc < 8.0)+ build-depends: fail Default-Language: Haskell2010 Default-Extensions: MultiParamTypeClasses
src/Data/Edison/Assoc.hs view
@@ -71,6 +71,8 @@ import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter) +import qualified Control.Monad.Fail as Fail+ import Data.Edison.Prelude import Data.Edison.Seq(Sequence)@@ -212,7 +214,7 @@ -- -- This function is /ambiguous/ at finite relation types if the key appears -- more than once in the finite relation. Otherwise, it is /unambiguous/.- lookupM :: (Monad rm) => k -> m a -> rm a+ lookupM :: (Fail.MonadFail rm) => k -> m a -> rm a -- | Return all elements bound by the given key in an unspecified order. --@@ -236,7 +238,7 @@ -- -- This function is /ambiguous/ at finite relation types if the key appears -- more than once in the finite relation. Otherwise, it is /unambiguous/.- lookupAndDeleteM :: (Monad rm) => k -> m a -> rm (a, m a)+ lookupAndDeleteM :: (Fail.MonadFail rm) => k -> m a -> rm (a, m a) -- | Find all elements bound by the given key; return a sequence containing -- all such bound elements in an unspecified order and the collection@@ -395,7 +397,7 @@ -- -- This function is /ambiguous/ at finite relation types if the finite relation -- contains more than one minimum key. Otherwise it is /unambiguous/.- minView :: (Monad rm) => m a -> rm (a, m a)+ minView :: (Fail.MonadFail rm) => m a -> rm (a, m a) -- | Find the binding with the minimum key and return its element. Signals -- an error if the associative collection is empty. Which element is chosen@@ -426,7 +428,7 @@ -- -- This function is /ambiguous/ at finite relation types if the finite relation -- contains more than one minimum key. Otherwise it is /unambiguous/.- maxView :: (Monad rm) => m a -> rm (a, m a)+ maxView :: (Fail.MonadFail rm) => m a -> rm (a, m a) -- | Find the binding with the maximum key and return its element. Signals -- an error if the associative collection is empty. Which element is chosen@@ -777,7 +779,7 @@ -- minimum key exists in the relation. Furthermore, it is /ambiguous/ -- with respect to the actual key observed unless the @Eq@ instance on -- keys corresponds to indistinguisability.- minViewWithKey :: (Monad rm) => m a -> rm ((k, a), m a)+ minViewWithKey :: (Fail.MonadFail rm) => m a -> rm ((k, a), m a) -- | Find the binding with the minimum key in an associative collection and -- return the key and the element. Signals an error if the associative@@ -800,7 +802,7 @@ -- maximum key exists in the relation. Furthermore, it is /ambiguous/ -- with respect to the actual key observed unless the @Eq@ instance on -- keys corresponds to indistinguisability.- maxViewWithKey :: (Monad rm) => m a -> rm ((k, a), m a)+ maxViewWithKey :: (Fail.MonadFail rm) => m a -> rm ((k, a), m a) -- | Find the binding with the maximum key in an associative collection and -- return the key and the element. Signals an error if the associative
src/Data/Edison/Coll.hs view
@@ -97,6 +97,7 @@ ) where import Prelude hiding (null,foldr,foldl,foldr1,foldl1,lookup,filter)+import qualified Control.Monad.Fail as Fail import Data.Monoid import Data.Edison.Prelude@@ -421,7 +422,7 @@ -- This function is /ambiguous/ at bag types, when more than one -- element equivalent to the given item is in the bag. Otherwise -- it is /unambiguous/.- lookupM :: (Monad m) => a -> c -> m a+ lookupM :: (Fail.MonadFail m) => a -> c -> m a -- | Return a sequence containing all elements in the collection equal to -- the given element in an unspecified order.@@ -504,7 +505,7 @@ -- -- This function is /ambiguous/ at bag types, if more than one minimum -- element exists in the bag. Otherwise, it is /unambiguous/.- minView :: (Monad m) => c -> m (a, c)+ minView :: (Fail.MonadFail m) => c -> m (a, c) -- | Return the minimum element in the collection. If there are multiple -- copies of the minimum element, it is unspecified which is chosen.@@ -523,7 +524,7 @@ -- -- This function is /ambiguous/ at bag types, if more than one maximum -- element exists in the bag. Otherwise, it is /unambiguous/.- maxView :: (Monad m) => c -> m (a, c)+ maxView :: (Fail.MonadFail m) => c -> m (a, c) -- | Return the maximum element in the collection. If there are multiple -- copies of the maximum element, it is unspecified which is chosen.
src/Data/Edison/Prelude.hs view
@@ -10,14 +10,19 @@ -- This module is a central depository of common definitions -- used throughout Edison. +{-# LANGUAGE GeneralizedNewtypeDeriving #-}+ module Data.Edison.Prelude ( -- * Hashing classes Hash (..) , UniqueHash , ReversibleHash (..) , Measured (..)+-- * Pure MonadFail+, runFail_ ) where +import Control.Monad.Fail import Data.Monoid -- | This class represents hashable objects. If obeys the @@ -62,3 +67,14 @@ -- the computation. class (Monoid v) => Measured v a | a -> v where measure :: a -> v++-- From Agda source code: src/full/Agda/Utils/Fail.hs+-- | A pure MonadFail.+newtype Fail a = Fail { runFail :: Either String a }+ deriving (Functor, Applicative, Monad)++instance MonadFail Fail where+ fail = Fail . Left++runFail_ :: Fail a -> a+runFail_ = either error id . runFail
src/Data/Edison/Seq.hs view
@@ -58,6 +58,7 @@ zip,zip3,zipWith,zipWith3,unzip,unzip3,null) import Control.Monad+import qualified Control.Monad.Fail as Fail import Data.Monoid import Data.Edison.Prelude@@ -221,7 +222,7 @@ -- This function is always /unambiguous/. -- -- Default running time: @O( 1 )@- lview :: (Monad m) => s a -> m (a, s a)+ lview :: (Fail.MonadFail m) => s a -> m (a, s a) -- | Return the first element of a sequence. -- Signals an error if the sequence is empty.@@ -249,7 +250,7 @@ -- This function is always /unambiguous/. -- -- Default running time: @O( 1 )@- lheadM :: (Monad m) => s a -> m a + lheadM :: (Fail.MonadFail m) => s a -> m a -- | Delete the first element of the sequence. -- Signals error if sequence is empty.@@ -277,7 +278,7 @@ -- This function is always /unambiguous/. -- -- Default running time: @O( 1 )@- ltailM :: (Monad m) => s a -> m (s a)+ ltailM :: (Fail.MonadFail m) => s a -> m (s a) -- | Separate a sequence into its last (rightmost) element and the -- remaining sequence. Calls 'fail' if the sequence is empty.@@ -291,7 +292,7 @@ -- This function is always /unambiguous/. -- -- Default running time: @O( n )@- rview :: (Monad m) => s a -> m (a, s a)+ rview :: (Fail.MonadFail m) => s a -> m (a, s a) -- | Return the last (rightmost) element of the sequence. -- Signals error if sequence is empty.@@ -319,7 +320,7 @@ -- This function is always /unambiguous/. -- -- Default running time: @O( n )@- rheadM :: (Monad m) => s a -> m a+ rheadM :: (Fail.MonadFail m) => s a -> m a -- | Delete the last (rightmost) element of the sequence. -- Signals an error if the sequence is empty.@@ -347,7 +348,7 @@ -- This function is always /unambiguous/. -- -- Default running time: @O( n )@- rtailM :: (Monad m) => s a -> m (s a)+ rtailM :: (Fail.MonadFail m) => s a -> m (s a) -- | Returns 'True' if the sequence is empty and 'False' otherwise. -- @@ -948,7 +949,7 @@ -- This function is always /unambiguous/. -- -- Default running time: @O( i )@- lookupM :: (Monad m) => Int -> s a -> m a+ lookupM :: (Fail.MonadFail m) => Int -> s a -> m a -- | Return the element at the given index, or the -- default argument if the index is out of bounds. All indexes are
src/Data/Edison/Seq/ListSeq.hs view
@@ -40,9 +40,9 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1, filter,takeWhile,dropWhile,lookup,take,drop,splitAt, zip,zip3,zipWith,zipWith3,unzip,unzip3,null)-import qualified Control.Monad.Identity as ID+import qualified Control.Monad.Fail as Fail import qualified Prelude-import Data.Edison.Prelude+import Data.Edison.Prelude ( runFail_ ) import qualified Data.List import Data.Monoid import qualified Data.Edison.Seq as S ( Sequence(..) ) @@ -54,16 +54,16 @@ lcons :: a -> [a] -> [a] rcons :: a -> [a] -> [a] append :: [a] -> [a] -> [a]-lview :: (Monad rm) => [a] -> rm (a, [a])+lview :: (Fail.MonadFail rm) => [a] -> rm (a, [a]) lhead :: [a] -> a-lheadM :: (Monad rm) => [a] -> rm a+lheadM :: (Fail.MonadFail rm) => [a] -> rm a ltail :: [a] -> [a]-ltailM :: (Monad rm) => [a] -> rm [a]-rview :: (Monad rm) => [a] -> rm (a, [a])+ltailM :: (Fail.MonadFail rm) => [a] -> rm [a]+rview :: (Fail.MonadFail rm) => [a] -> rm (a, [a]) rhead :: [a] -> a-rheadM :: (Monad rm) => [a] -> rm a+rheadM :: (Fail.MonadFail rm) => [a] -> rm a rtail :: [a] -> [a]-rtailM :: (Monad rm) => [a] -> rm [a]+rtailM :: (Fail.MonadFail rm) => [a] -> rm [a] null :: [a] -> Bool size :: [a] -> Int concat :: [[a]] -> [a]@@ -92,7 +92,7 @@ copy :: Int -> a -> [a] inBounds :: Int -> [a] -> Bool lookup :: Int -> [a] -> a-lookupM :: (Monad m) => Int -> [a] -> m a+lookupM :: (Fail.MonadFail m) => Int -> [a] -> m a lookupWithDefault :: a -> Int -> [a] -> a update :: Int -> a -> [a] -> [a] adjust :: (a -> a) -> Int -> [a] -> [a]@@ -252,7 +252,7 @@ | i >= 0 = not (null (drop i xs)) | otherwise = False -lookup i xs = ID.runIdentity (lookupM i xs)+lookup i xs = runFail_ (lookupM i xs) lookupM i xs | i < 0 = fail "ListSeq.lookup: not found"