[arch-commits] Commit in haskell-edisoncore/repos/community-staging-x86_64 (4 files)
Felix Yan
felixonmars at archlinux.org
Wed Feb 5 07:41:31 UTC 2020
Date: Wednesday, February 5, 2020 @ 07:41:31
Author: felixonmars
Revision: 562777
archrelease: copy trunk to community-staging-x86_64
Added:
haskell-edisoncore/repos/community-staging-x86_64/PKGBUILD
(from rev 562776, haskell-edisoncore/trunk/PKGBUILD)
haskell-edisoncore/repos/community-staging-x86_64/ghc-8.8.patch
(from rev 562776, haskell-edisoncore/trunk/ghc-8.8.patch)
Deleted:
haskell-edisoncore/repos/community-staging-x86_64/PKGBUILD
haskell-edisoncore/repos/community-staging-x86_64/ghc-8.8.patch
---------------+
PKGBUILD | 90 -
ghc-8.8.patch | 2618 ++++++++++++++++++++++++++++----------------------------
2 files changed, 1354 insertions(+), 1354 deletions(-)
Deleted: PKGBUILD
===================================================================
--- PKGBUILD 2020-02-05 07:41:11 UTC (rev 562776)
+++ PKGBUILD 2020-02-05 07:41:31 UTC (rev 562777)
@@ -1,45 +0,0 @@
-# Maintainer: Felix Yan <felixonmars at archlinux.org>
-# Contributor: Arch Haskell Team <arch-haskell at haskell.org>
-
-_hkgname=EdisonCore
-pkgname=haskell-edisoncore
-pkgver=1.3.2.1
-pkgrel=33
-pkgdesc="A library of efficient, purely-functional data structures (Core Implementations)"
-url="http://rwd.rdockins.name/edison/home/"
-license=("MIT")
-arch=('x86_64')
-depends=('ghc-libs' "haskell-edisonapi" "haskell-quickcheck")
-makedepends=('ghc')
-source=("https://hackage.haskell.org/packages/archive/${_hkgname}/${pkgver}/${_hkgname}-${pkgver}.tar.gz"
- ghc-8.8.patch)
-sha512sums=('6812b04edb1abdfc2486d66bb86d6370b76667de1603ab421d92a6ecc17a25014e0ab97f53dd4f1e75cacf32c31611e8f2dd6c740c840e349c3c762ae00df65f'
- '51d21d66af08756d68128734590cd9a5cf06a3972f5aba0175ff0d1c9e64b90983d8d7ee90b50380f97afafe2a7b157eb467552a0f7cc067517707996d712a0c')
-
-prepare() {
- cd $_hkgname-$pkgver
- patch -p2 -i ../ghc-8.8.patch
-}
-
-build() {
- cd $_hkgname-$pkgver
-
- runhaskell Setup configure -O --enable-shared --enable-executable-dynamic --disable-library-vanilla \
- --prefix=/usr --docdir=/usr/share/doc/$pkgname \
- --dynlibdir=/usr/lib --libsubdir=\$compiler/site-local/\$pkgid
- runhaskell Setup build
- runhaskell Setup register --gen-script
- runhaskell Setup unregister --gen-script
- sed -i -r -e "s|ghc-pkg.*update[^ ]* |&'--force' |" register.sh
- sed -i -r -e "s|ghc-pkg.*unregister[^ ]* |&'--force' |" unregister.sh
-}
-
-package() {
- cd $_hkgname-$pkgver
-
- install -D -m744 register.sh "$pkgdir"/usr/share/haskell/register/$pkgname.sh
- install -D -m744 unregister.sh "$pkgdir"/usr/share/haskell/unregister/$pkgname.sh
- runhaskell Setup copy --destdir="$pkgdir"
- install -D -m644 "COPYRIGHT" "${pkgdir}/usr/share/licenses/${pkgname}/COPYRIGHT"
- rm -f "${pkgdir}/usr/share/doc/${pkgname}/COPYRIGHT"
-}
Copied: haskell-edisoncore/repos/community-staging-x86_64/PKGBUILD (from rev 562776, haskell-edisoncore/trunk/PKGBUILD)
===================================================================
--- PKGBUILD (rev 0)
+++ PKGBUILD 2020-02-05 07:41:31 UTC (rev 562777)
@@ -0,0 +1,45 @@
+# Maintainer: Felix Yan <felixonmars at archlinux.org>
+# Contributor: Arch Haskell Team <arch-haskell at haskell.org>
+
+_hkgname=EdisonCore
+pkgname=haskell-edisoncore
+pkgver=1.3.2.1
+pkgrel=34
+pkgdesc="A library of efficient, purely-functional data structures (Core Implementations)"
+url="http://rwd.rdockins.name/edison/home/"
+license=("MIT")
+arch=('x86_64')
+depends=('ghc-libs' "haskell-edisonapi" "haskell-quickcheck")
+makedepends=('ghc')
+source=("https://hackage.haskell.org/packages/archive/${_hkgname}/${pkgver}/${_hkgname}-${pkgver}.tar.gz"
+ ghc-8.8.patch)
+sha512sums=('6812b04edb1abdfc2486d66bb86d6370b76667de1603ab421d92a6ecc17a25014e0ab97f53dd4f1e75cacf32c31611e8f2dd6c740c840e349c3c762ae00df65f'
+ '51d21d66af08756d68128734590cd9a5cf06a3972f5aba0175ff0d1c9e64b90983d8d7ee90b50380f97afafe2a7b157eb467552a0f7cc067517707996d712a0c')
+
+prepare() {
+ cd $_hkgname-$pkgver
+ patch -p2 -i ../ghc-8.8.patch
+}
+
+build() {
+ cd $_hkgname-$pkgver
+
+ runhaskell Setup configure -O --enable-shared --enable-executable-dynamic --disable-library-vanilla \
+ --prefix=/usr --docdir=/usr/share/doc/$pkgname \
+ --dynlibdir=/usr/lib --libsubdir=\$compiler/site-local/\$pkgid
+ runhaskell Setup build
+ runhaskell Setup register --gen-script
+ runhaskell Setup unregister --gen-script
+ sed -i -r -e "s|ghc-pkg.*update[^ ]* |&'--force' |" register.sh
+ sed -i -r -e "s|ghc-pkg.*unregister[^ ]* |&'--force' |" unregister.sh
+}
+
+package() {
+ cd $_hkgname-$pkgver
+
+ install -D -m744 register.sh "$pkgdir"/usr/share/haskell/register/$pkgname.sh
+ install -D -m744 unregister.sh "$pkgdir"/usr/share/haskell/unregister/$pkgname.sh
+ runhaskell Setup copy --destdir="$pkgdir"
+ install -D -m644 "COPYRIGHT" "${pkgdir}/usr/share/licenses/${pkgname}/COPYRIGHT"
+ rm -f "${pkgdir}/usr/share/doc/${pkgname}/COPYRIGHT"
+}
Deleted: ghc-8.8.patch
===================================================================
--- ghc-8.8.patch 2020-02-05 07:41:11 UTC (rev 562776)
+++ ghc-8.8.patch 2020-02-05 07:41:31 UTC (rev 562777)
@@ -1,1309 +0,0 @@
-From 8da6c0f7d8666766e2f0693425c347c0adb492dc Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Andr=C3=A9s=20Sicard-Ram=C3=ADrez?= <asr at eafit.edu.co>
-Date: Thu, 4 Jul 2019 18:15:17 -0500
-Subject: [PATCH] Supported GHC 8.8.1.
-
-All changes were required by the MonadFail proposal.
----
- edison-api/EdisonAPI.cabal | 2 ++
- edison-api/src/Data/Edison/Assoc.hs | 14 ++++++-----
- edison-api/src/Data/Edison/Coll.hs | 7 +++---
- edison-api/src/Data/Edison/Prelude.hs | 16 ++++++++++++
- edison-api/src/Data/Edison/Seq.hs | 15 +++++------
- edison-api/src/Data/Edison/Seq/ListSeq.hs | 20 +++++++--------
- edison-core/EdisonCore.cabal | 6 +++--
- .../src/Data/Edison/Assoc/AssocList.hs | 19 +++++++-------
- edison-core/src/Data/Edison/Assoc/Defaults.hs | 4 ++-
- .../src/Data/Edison/Assoc/PatriciaLoMap.hs | 17 +++++++------
- .../src/Data/Edison/Assoc/StandardMap.hs | 13 +++++-----
- .../src/Data/Edison/Assoc/TernaryTrie.hs | 22 ++++++++--------
- edison-core/src/Data/Edison/Coll/Defaults.hs | 9 ++++---
- edison-core/src/Data/Edison/Coll/EnumSet.hs | 7 +++---
- .../src/Data/Edison/Coll/LazyPairingHeap.hs | 7 +++---
- .../src/Data/Edison/Coll/LeftistHeap.hs | 7 +++---
- edison-core/src/Data/Edison/Coll/MinHeap.hs | 7 +++---
- edison-core/src/Data/Edison/Coll/SkewHeap.hs | 7 +++---
- edison-core/src/Data/Edison/Coll/SplayHeap.hs | 7 +++---
- .../src/Data/Edison/Coll/StandardSet.hs | 7 +++---
- .../src/Data/Edison/Coll/UnbalancedSet.hs | 7 +++---
- .../src/Data/Edison/Concrete/FingerTree.hs | 5 ++--
- .../src/Data/Edison/Seq/BankersQueue.hs | 18 +++++++------
- .../src/Data/Edison/Seq/BinaryRandList.hs | 19 +++++++-------
- edison-core/src/Data/Edison/Seq/BraunSeq.hs | 18 +++++++------
- edison-core/src/Data/Edison/Seq/Defaults.hs | 10 +++++---
- edison-core/src/Data/Edison/Seq/FingerSeq.hs | 25 ++++++++++---------
- edison-core/src/Data/Edison/Seq/JoinList.hs | 15 +++++------
- edison-core/src/Data/Edison/Seq/MyersStack.hs | 18 +++++++------
- edison-core/src/Data/Edison/Seq/RandList.hs | 18 +++++++------
- edison-core/src/Data/Edison/Seq/RevSeq.hs | 15 +++++------
- .../src/Data/Edison/Seq/SimpleQueue.hs | 15 +++++------
- edison-core/src/Data/Edison/Seq/SizedSeq.hs | 15 +++++------
- 33 files changed, 234 insertions(+), 177 deletions(-)
-
-diff --git a/edison-core/EdisonCore.cabal b/edison-core/EdisonCore.cabal
-index 901cd83..ad1af00 100644
---- a/edison-core/EdisonCore.cabal
-+++ b/edison-core/EdisonCore.cabal
-@@ -62,8 +62,10 @@ Library
- array
-
- if impl(ghc < 8.0)
-- -- Provide/emulate Data.Semigroups` API for pre-GHC-8
-- Build-Depends: semigroups == 0.18.*
-+ Build-Depends:
-+ fail,
-+ -- Provide/emulate Data.Semigroups` API for pre-GHC-8
-+ semigroups == 0.18.*
-
- Default-Language: Haskell2010
- Default-Extensions:
-diff --git a/edison-core/src/Data/Edison/Assoc/AssocList.hs b/edison-core/src/Data/Edison/Assoc/AssocList.hs
-index c577492..15d9884 100644
---- a/edison-core/src/Data/Edison/Assoc/AssocList.hs
-+++ b/edison-core/src/Data/Edison/Assoc/AssocList.hs
-@@ -58,8 +58,9 @@ import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
- import qualified Prelude
- import Data.Monoid
- import Data.Semigroup as SG
--import Control.Monad.Identity
-+import qualified Control.Monad.Fail as Fail
- import qualified Data.Edison.Assoc as A
-+import Data.Edison.Prelude ( runFail_ )
- import qualified Data.Edison.Seq as S
- import qualified Data.Edison.Seq.BinaryRandList as RL
- import Data.Edison.Assoc.Defaults
-@@ -82,10 +83,10 @@ size :: Eq k => FM k a -> Int
- member :: Eq k => k -> FM k a -> Bool
- count :: Eq k => k -> FM k a -> Int
- lookup :: Eq k => k -> FM k a -> a
--lookupM :: (Eq k, Monad rm) => k -> FM k a -> rm a
-+lookupM :: (Eq k, Fail.MonadFail rm) => k -> FM k a -> rm a
- lookupAll :: (Eq k,S.Sequence seq) => k -> FM k a -> seq a
- lookupAndDelete :: Eq k => k -> FM k a -> (a,FM k a)
--lookupAndDeleteM :: (Eq k,Monad rm) => k -> FM k a -> rm (a,FM k a)
-+lookupAndDeleteM :: (Eq k, Fail.MonadFail rm) => k -> FM k a -> rm (a,FM k a)
- lookupAndDeleteAll :: (Eq k,S.Sequence seq) => k -> FM k a -> (seq a,FM k a)
- lookupWithDefault :: Eq k => a -> k -> FM k a -> a
- adjust :: Eq k => (a -> a) -> k -> FM k a -> FM k a
-@@ -143,11 +144,11 @@ unionSeqWithKey :: (Eq k,S.Sequence seq) =>
- (k -> a -> a -> a) -> seq (FM k a) -> FM k a
- intersectionWithKey :: Eq k => (k -> a -> b -> c) -> FM k a -> FM k b -> FM k c
-
--minView :: (Ord k,Monad m) => FM k a -> m (a,FM k a)
-+minView :: (Ord k, Fail.MonadFail m) => FM k a -> m (a,FM k a)
- minElem :: Ord k => FM k a -> a
- deleteMin :: Ord k => FM k a -> FM k a
- unsafeInsertMin :: Ord k => k -> a -> FM k a -> FM k a
--maxView :: (Ord k,Monad m) => FM k a -> m (a,FM k a)
-+maxView :: (Ord k, Fail.MonadFail m) => FM k a -> m (a,FM k a)
- maxElem :: Ord k => FM k a -> a
- deleteMax :: Ord k => FM k a -> FM k a
- unsafeInsertMax :: Ord k => k -> a -> FM k a -> FM k a
-@@ -169,9 +170,9 @@ partitionLT_GE :: Ord k => k -> FM k a -> (FM k a,FM k a)
- partitionLE_GT :: Ord k => k -> FM k a -> (FM k a,FM k a)
- partitionLT_GT :: Ord k => k -> FM k a -> (FM k a,FM k a)
-
--minViewWithKey :: (Ord k,Monad m) => FM k a -> m ((k, a), FM k a)
-+minViewWithKey :: (Ord k, Fail.MonadFail m) => FM k a -> m ((k, a), FM k a)
- minElemWithKey :: Ord k => FM k a -> (k,a)
--maxViewWithKey :: (Ord k,Monad m) => FM k a -> m ((k, a), FM k a)
-+maxViewWithKey :: (Ord k, Fail.MonadFail m) => FM k a -> m ((k, a), FM k a)
- maxElemWithKey :: Ord k => FM k a -> (k,a)
- foldrWithKey :: Ord k => (k -> a -> b -> b) -> b -> FM k a -> b
- foldlWithKey :: Ord k => (b -> k -> a -> b) -> b -> FM k a -> b
-@@ -309,7 +310,7 @@ count _ E = 0
- count key (I k _ m) | key == k = 1
- | otherwise = count key m
-
--lookup key m = runIdentity (lookupM key m)
-+lookup key m = runFail_ (lookupM key m)
-
- lookupM _ E = fail "AssocList.lookup: lookup failed"
- lookupM key (I k x m) | key == k = return x
-@@ -319,7 +320,7 @@ lookupAll _ E = S.empty
- lookupAll key (I k x m) | key == k = S.singleton x
- | otherwise = lookupAll key m
-
--lookupAndDelete key m = runIdentity (lookupAndDeleteM key m)
-+lookupAndDelete key m = runFail_ (lookupAndDeleteM key m)
-
- lookupAndDeleteM _ E = fail "AssocList.lookupAndDeleteM: lookup failed"
- lookupAndDeleteM key (I k x m)
-diff --git a/edison-core/src/Data/Edison/Assoc/Defaults.hs b/edison-core/src/Data/Edison/Assoc/Defaults.hs
-index a9ef520..8e2b37d 100644
---- a/edison-core/src/Data/Edison/Assoc/Defaults.hs
-+++ b/edison-core/src/Data/Edison/Assoc/Defaults.hs
-@@ -15,6 +15,8 @@ module Data.Edison.Assoc.Defaults where
-
- import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
-
-+import qualified Control.Monad.Fail as Fail
-+
- import Data.Edison.Assoc
- import qualified Data.Edison.Seq as S
- import qualified Data.Edison.Seq.ListSeq as L
-@@ -190,7 +192,7 @@ lookupAndDeleteDefault k m =
- Nothing -> error (instanceName m ++ ".lookupAndDelete: lookup failed")
- Just x -> (x, delete k m)
-
--lookupAndDeleteMDefault :: (Monad rm, AssocX m k) => k -> m a -> rm (a, m a)
-+lookupAndDeleteMDefault :: (Fail.MonadFail rm, AssocX m k) => k -> m a -> rm (a, m a)
- lookupAndDeleteMDefault k m =
- case lookupM k m of
- Nothing -> fail (instanceName m ++ ".lookupAndDelete: lookup failed")
-diff --git a/edison-core/src/Data/Edison/Assoc/PatriciaLoMap.hs b/edison-core/src/Data/Edison/Assoc/PatriciaLoMap.hs
-index 3073f83..43c2d85 100644
---- a/edison-core/src/Data/Edison/Assoc/PatriciaLoMap.hs
-+++ b/edison-core/src/Data/Edison/Assoc/PatriciaLoMap.hs
-@@ -55,10 +55,11 @@ module Data.Edison.Assoc.PatriciaLoMap (
-
- import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
- import qualified Prelude
--import Control.Monad.Identity (runIdentity)
-+import qualified Control.Monad.Fail as Fail
- import Data.Monoid
- import Data.Semigroup as SG
- import qualified Data.Edison.Assoc as A
-+import Data.Edison.Prelude ( runFail_ )
- import qualified Data.Edison.Seq as S
- import qualified Data.Edison.Seq.ListSeq as L
- import Data.Edison.Assoc.Defaults
-@@ -210,9 +211,9 @@ member k (L j _) = (j == k)
- member k (B _ m t0 t1) = if zeroBit k m then member k t0 else member k t1
-
- lookup :: Int -> FM a -> a
--lookup k m = runIdentity (lookupM k m)
-+lookup k m = runFail_ (lookupM k m)
-
--lookupM :: (Monad rm) => Int -> FM a -> rm a
-+lookupM :: (Fail.MonadFail rm) => Int -> FM a -> rm a
- lookupM _ E = fail "PatriciaLoMap.lookup: lookup failed"
- lookupM k (L j x)
- | j == k = return x
-@@ -233,7 +234,7 @@ lookupAndDelete = doLookupAndDelete
- (error "PatriciaLoMap.lookupAndDelete: lookup failed")
- (,)
-
--lookupAndDeleteM :: Monad m => Int -> FM a -> m (a, FM a)
-+lookupAndDeleteM :: Fail.MonadFail m => Int -> FM a -> m (a, FM a)
- lookupAndDeleteM = doLookupAndDelete
- (fail "PatriciaLoMap.lookupAndDelete: lookup failed")
- (\x m -> return (x,m))
-@@ -583,25 +584,25 @@ ordListFM_rev (B _ _ t0 t1) = merge (ordListFM_rev t0) (ordListFM_rev t1)
- GT -> x : merge xs (y:ys)
- EQ -> error "PatriciaLoMap: bug in ordListFM_rev"
-
--minView :: Monad m => FM a -> m (a, FM a)
-+minView :: Fail.MonadFail m => FM a -> m (a, FM a)
- minView fm =
- case ordListFM fm of
- [] -> fail $ moduleName++".minView: empty map"
- ((k,x):_) -> return (x,delete k fm)
-
--minViewWithKey :: Monad m => FM a -> m ((Int, a), FM a)
-+minViewWithKey :: Fail.MonadFail m => FM a -> m ((Int, a), FM a)
- minViewWithKey fm =
- case ordListFM fm of
- [] -> fail $ moduleName++".minViewWithKey: empty map"
- ((k,x):_) -> return ((k,x),delete k fm)
-
--maxView :: Monad m => FM a -> m (a, FM a)
-+maxView :: Fail.MonadFail m => FM a -> m (a, FM a)
- maxView fm =
- case ordListFM_rev fm of
- [] -> fail $ moduleName++".maxView: empty map"
- ((k,x):_) -> return (x,delete k fm)
-
--maxViewWithKey :: Monad m => FM a -> m ((Int, a), FM a)
-+maxViewWithKey :: Fail.MonadFail m => FM a -> m ((Int, a), FM a)
- maxViewWithKey fm =
- case ordListFM_rev fm of
- [] -> fail $ moduleName++".maxViewWithKey: empty map"
-diff --git a/edison-core/src/Data/Edison/Assoc/StandardMap.hs b/edison-core/src/Data/Edison/Assoc/StandardMap.hs
-index 5ca48c5..e7b6a0e 100644
---- a/edison-core/src/Data/Edison/Assoc/StandardMap.hs
-+++ b/edison-core/src/Data/Edison/Assoc/StandardMap.hs
-@@ -51,6 +51,7 @@ module Data.Edison.Assoc.StandardMap (
-
- import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
- import qualified Prelude
-+import qualified Control.Monad.Fail as Fail
- import qualified Data.Edison.Assoc as A
- import qualified Data.Edison.Seq as S
- import qualified Data.Edison.Seq.ListSeq as L
-@@ -81,10 +82,10 @@ member :: Ord k => k -> FM k a -> Bool
- count :: Ord k => k -> FM k a -> Int
- lookup :: Ord k => k -> FM k a -> a
- lookupAll :: (Ord k,S.Sequence seq) => k -> FM k a -> seq a
--lookupM :: (Ord k,Monad m) => k -> FM k a -> m a
-+lookupM :: (Ord k, Fail.MonadFail m) => k -> FM k a -> m a
- lookupWithDefault :: Ord k => a -> k -> FM k a -> a
- lookupAndDelete :: Ord k => k -> FM k a -> (a, FM k a)
--lookupAndDeleteM :: (Ord k,Monad m) => k -> FM k a -> m (a, FM k a)
-+lookupAndDeleteM :: (Ord k, Fail.MonadFail m) => k -> FM k a -> m (a, FM k a)
- lookupAndDeleteAll :: (Ord k,S.Sequence seq) => k -> FM k a -> (seq a,FM k a)
- adjust :: Ord k => (a->a) -> k -> FM k a -> FM k a
- adjustAll :: Ord k => (a->a) -> k -> FM k a -> FM k a
-@@ -103,11 +104,11 @@ filter :: Ord k => (a -> Bool) -> FM k a -> FM k a
- partition :: Ord k => (a -> Bool) -> FM k a -> (FM k a,FM k a)
- elements :: (Ord k,S.Sequence seq) => FM k a -> seq a
-
--minView :: (Ord k,Monad m) => FM k a -> m (a, FM k a)
-+minView :: (Ord k, Fail.MonadFail m) => FM k a -> m (a, FM k a)
- minElem :: Ord k => FM k a -> a
- deleteMin :: Ord k => FM k a -> FM k a
- unsafeInsertMin :: Ord k => k -> a -> FM k a -> FM k a
--maxView :: (Ord k,Monad m) => FM k a -> m (a, FM k a)
-+maxView :: (Ord k, Fail.MonadFail m) => FM k a -> m (a, FM k a)
- maxElem :: Ord k => FM k a -> a
- deleteMax :: Ord k => FM k a -> FM k a
- unsafeInsertMax :: Ord k => k -> a -> FM k a -> FM k a
-@@ -165,9 +166,9 @@ foldWithKey' :: Ord k => (k -> a -> b -> b) -> b -> FM k a -> b
- filterWithKey :: Ord k => (k -> a -> Bool) -> FM k a -> FM k a
- partitionWithKey :: Ord k => (k -> a -> Bool) -> FM k a -> (FM k a,FM k a)
-
--minViewWithKey :: (Ord k,Monad m) => FM k a -> m ((k, a), FM k a)
-+minViewWithKey :: (Ord k, Fail.MonadFail m) => FM k a -> m ((k, a), FM k a)
- minElemWithKey :: Ord k => FM k a -> (k,a)
--maxViewWithKey :: (Ord k,Monad m) => FM k a -> m ((k, a), FM k a)
-+maxViewWithKey :: (Ord k, Fail.MonadFail m) => FM k a -> m ((k, a), FM k a)
- maxElemWithKey :: Ord k => FM k a -> (k,a)
- foldrWithKey :: (k -> a -> b -> b) -> b -> FM k a -> b
- foldlWithKey :: (b -> k -> a -> b) -> b -> FM k a -> b
-diff --git a/edison-core/src/Data/Edison/Assoc/TernaryTrie.hs b/edison-core/src/Data/Edison/Assoc/TernaryTrie.hs
-index 8b2dd57..431b348 100644
---- a/edison-core/src/Data/Edison/Assoc/TernaryTrie.hs
-+++ b/edison-core/src/Data/Edison/Assoc/TernaryTrie.hs
-@@ -55,8 +55,10 @@ module Data.Edison.Assoc.TernaryTrie (
- import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
- import qualified Prelude
- import qualified Data.Edison.Assoc as A
-+import Data.Edison.Prelude ( runFail_ )
- import qualified Data.Edison.Seq as S
- import qualified Data.List as L
-+import qualified Control.Monad.Fail as Fail
- import Control.Monad.Identity
- import Data.Monoid
- import Data.Semigroup as SG
-@@ -83,10 +85,10 @@ size :: Ord k => FM k a -> Int
- member :: Ord k => [k] -> FM k a -> Bool
- count :: Ord k => [k] -> FM k a -> Int
- lookup :: Ord k => [k] -> FM k a -> a
--lookupM :: (Ord k, Monad rm) => [k] -> FM k a -> rm a
-+lookupM :: (Ord k, Fail.MonadFail rm) => [k] -> FM k a -> rm a
- lookupAll :: (Ord k,S.Sequence seq) => [k] -> FM k a -> seq a
- lookupAndDelete :: Ord k => [k] -> FM k a -> (a, FM k a)
--lookupAndDeleteM :: (Ord k, Monad rm) => [k] -> FM k a -> rm (a, FM k a)
-+lookupAndDeleteM :: (Ord k, Fail.MonadFail rm) => [k] -> FM k a -> rm (a, FM k a)
- lookupAndDeleteAll :: (Ord k, S.Sequence seq) => [k] -> FM k a -> (seq a,FM k a)
- lookupWithDefault :: Ord k => a -> [k] -> FM k a -> a
- adjust :: Ord k => (a -> a) -> [k] -> FM k a -> FM k a
-@@ -527,7 +529,7 @@ member = memberUsingLookupM
-
- count = countUsingMember
-
--lookup m k = runIdentity (lookupM m k)
-+lookup m k = runFail_ (lookupM m k)
-
- lookupM [] (FM Nothing _)
- = fail "TernaryTrie.lookup: lookup failed"
-@@ -854,18 +856,18 @@ intersectionWithKey f
-
- -- OrdAssocX
-
--minViewFMB :: Monad m => FMB k a -> (FMB k a -> FM k a) -> m (a, FM k a)
-+minViewFMB :: Fail.MonadFail m => FMB k a -> (FMB k a -> FM k a) -> m (a, FM k a)
- minViewFMB E _ = fail $ moduleName++".minView: empty map"
- minViewFMB (I i k (Just v) E m r) f = return (v, f (I i k Nothing E m r))
- minViewFMB (I _ _ Nothing E (FMB' E) _) _ = error $ moduleName++".minView: bug!"
- minViewFMB (I _ k Nothing E (FMB' m) r) f = minViewFMB m (\m' -> f (mkVBalancedFMB k Nothing E (FMB' m') r))
- minViewFMB (I _ k mv l m r) f = minViewFMB l (\l' -> f (mkVBalancedFMB k mv l' m r))
-
--minView :: Monad m => FM k a -> m (a,FM k a)
-+minView :: Fail.MonadFail m => FM k a -> m (a,FM k a)
- minView (FM (Just v) fmb) = return (v, FM Nothing fmb)
- minView (FM Nothing fmb) = minViewFMB fmb (FM Nothing)
-
--minViewWithKeyFMB :: Monad m => FMB k a -> ([k] -> [k]) -> (FMB k a -> FM k a) -> m (([k],a),FM k a)
-+minViewWithKeyFMB :: Fail.MonadFail m => FMB k a -> ([k] -> [k]) -> (FMB k a -> FM k a) -> m (([k],a),FM k a)
- minViewWithKeyFMB E _ _ = fail $ moduleName++".minView: empty map"
- minViewWithKeyFMB (I i k (Just v) E m r) kf f = return ((kf [k],v),f (I i k Nothing E m r))
- minViewWithKeyFMB (I _ _ Nothing E (FMB' E) _) _ _ = error $ moduleName++".minViewWithKey: bug!"
-@@ -874,7 +876,7 @@ minViewWithKeyFMB (I _ k Nothing E (FMB' m) r) kf f = minViewWithKeyFMB m (kf .
- minViewWithKeyFMB (I _ k mv l m r) kf f = minViewWithKeyFMB l kf
- (\l' -> f (mkVBalancedFMB k mv l' m r))
-
--minViewWithKey :: Monad m => FM k a -> m (([k],a),FM k a)
-+minViewWithKey :: Fail.MonadFail m => FM k a -> m (([k],a),FM k a)
- minViewWithKey (FM (Just v) fmb) = return (([],v),FM Nothing fmb)
- minViewWithKey (FM Nothing fmb) = minViewWithKeyFMB fmb id (FM Nothing)
-
-@@ -906,7 +908,7 @@ deleteMin = deleteMinUsingMinView
- unsafeInsertMin :: Ord k => [k] -> a -> FM k a -> FM k a
- unsafeInsertMin = insert
-
--maxViewFMB :: Monad m => FMB k a -> (FMB k a -> FM k a) -> m (a, FM k a)
-+maxViewFMB :: Fail.MonadFail m => FMB k a -> (FMB k a -> FM k a) -> m (a, FM k a)
- maxViewFMB (I _ _ (Just v) l (FMB' E) E) f = return (v, f l)
- --maxViewFMB (I i k (Just v) l (FMB' E) E) f = return (v, f (I i k Nothing l (FMB' E) E))
- maxViewFMB (I _ _ Nothing _ (FMB' E) E) _ = error $ moduleName++".maxView: bug!"
-@@ -914,7 +916,7 @@ maxViewFMB (I i k mv l (FMB' m) E) f = maxViewFMB m (\m' -> f (I i k mv l
- maxViewFMB (I _ k mv l m r) f = maxViewFMB r (\r' -> f (mkVBalancedFMB k mv l m r'))
- maxViewFMB E _ = error $ moduleName++".maxView: bug!"
-
--maxView :: Monad m => FM k a -> m (a, FM k a)
-+maxView :: Fail.MonadFail m => FM k a -> m (a, FM k a)
- maxView (FM Nothing E) = fail $ moduleName++".maxView: empty map"
- maxView (FM (Just v) E) = return (v,FM Nothing E)
- maxView (FM mv fmb) = maxViewFMB fmb (FM mv)
-@@ -930,7 +932,7 @@ maxViewWithKeyFMB (I _ k mv l m r) kf f = maxViewWithKeyFMB r kf
- maxViewWithKeyFMB E _ _ = error $ moduleName++".maxViewWithKey: bug!"
-
-
--maxViewWithKey :: Monad m => FM k a -> m (([k],a), FM k a)
-+maxViewWithKey :: Fail.MonadFail m => FM k a -> m (([k],a), FM k a)
- maxViewWithKey (FM Nothing E) = fail $ moduleName++".maxViewWithKey: empty map"
- maxViewWithKey (FM (Just v) E) = return (([],v),FM Nothing E)
- maxViewWithKey (FM mv fmb) = maxViewWithKeyFMB fmb id (FM mv)
-diff --git a/edison-core/src/Data/Edison/Coll/Defaults.hs b/edison-core/src/Data/Edison/Coll/Defaults.hs
-index 213ed36..d927f38 100644
---- a/edison-core/src/Data/Edison/Coll/Defaults.hs
-+++ b/edison-core/src/Data/Edison/Coll/Defaults.hs
-@@ -14,8 +14,9 @@
- module Data.Edison.Coll.Defaults where
-
- import Prelude hiding (null,foldr,foldl,foldr1,foldl1,lookup,filter)
--import Control.Monad.Identity
-+import qualified Control.Monad.Fail as Fail
-
-+import Data.Edison.Prelude ( runFail_ )
- import Data.Edison.Coll
- import qualified Data.Edison.Seq as S
- import qualified Data.Edison.Seq.ListSeq as L
-@@ -81,7 +82,7 @@ disjointUsingToOrdList xs ys = disj (toOrdList xs) (toOrdList ys)
- disj _ _ = True
-
- intersectWitnessUsingToOrdList ::
-- (OrdColl c a, Monad m) => c -> c -> m (a,a)
-+ (OrdColl c a, Fail.MonadFail m) => c -> c -> m (a,a)
- intersectWitnessUsingToOrdList as bs = witness (toOrdList as) (toOrdList bs)
- where witness a@(x:xs) b@(y:ys) =
- case compare x y of
-@@ -92,7 +93,7 @@ intersectWitnessUsingToOrdList as bs = witness (toOrdList as) (toOrdList bs)
- witness _ _ = fail $ instanceName as ++ ".intersect: failed"
-
- lookupUsingLookupM :: Coll c a => a -> c -> a
--lookupUsingLookupM x ys = runIdentity (lookupM x ys)
-+lookupUsingLookupM x ys = runFail_ (lookupM x ys)
-
- lookupUsingLookupAll :: Coll c a => a -> c -> a
- lookupUsingLookupAll x ys =
-@@ -100,7 +101,7 @@ lookupUsingLookupAll x ys =
- (y:_) -> y
- [] -> error $ instanceName ys ++ ".lookup: lookup failed"
-
--lookupMUsingLookupAll :: (Coll c a, Monad m) => a -> c -> m a
-+lookupMUsingLookupAll :: (Coll c a, Fail.MonadFail m) => a -> c -> m a
- lookupMUsingLookupAll x ys =
- case lookupAll x ys of
- (y:_) -> return y
-diff --git a/edison-core/src/Data/Edison/Coll/EnumSet.hs b/edison-core/src/Data/Edison/Coll/EnumSet.hs
-index c93ab07..cce68e6 100644
---- a/edison-core/src/Data/Edison/Coll/EnumSet.hs
-+++ b/edison-core/src/Data/Edison/Coll/EnumSet.hs
-@@ -157,6 +157,7 @@ module Data.Edison.Coll.EnumSet (
-
- import qualified Prelude
- import Prelude hiding (filter,foldl,foldr,null,map,lookup,foldl1,foldr1)
-+import qualified Control.Monad.Fail as Fail
- import qualified Data.Bits as Bits
- import Data.Bits hiding (complement)
- import Data.Word
-@@ -251,7 +252,7 @@ count = countUsingMember
- lookup :: (Eq a, Enum a) => a -> Set a -> a
- lookup = lookupUsingLookupAll
-
--lookupM :: (Eq a, Enum a, Monad m) => a -> Set a -> m a
-+lookupM :: (Eq a, Enum a, Fail.MonadFail m) => a -> Set a -> m a
- lookupM x s
- | member x s = return x
- | otherwise = fail (moduleName++".lookupM: lookup failed")
-@@ -340,12 +341,12 @@ deleteMax (Set w)
- | w == 0 = empty
- | otherwise = Set $ clearBit w $ msb w
-
--minView :: (Enum a, Monad m) => Set a -> m (a, Set a)
-+minView :: (Enum a, Fail.MonadFail m) => Set a -> m (a, Set a)
- minView (Set w)
- | w == 0 = fail (moduleName++".minView: empty set")
- | otherwise = let i = lsb w in return (toEnum i,Set $ clearBit w i)
-
--maxView :: (Enum a, Monad m) => Set a -> m (a, Set a)
-+maxView :: (Enum a, Fail.MonadFail m) => Set a -> m (a, Set a)
- maxView (Set w)
- | w == 0 = fail (moduleName++".maxView: empty set")
- | otherwise = let i = msb w in return (toEnum i, Set $ clearBit w i)
-diff --git a/edison-core/src/Data/Edison/Coll/LazyPairingHeap.hs b/edison-core/src/Data/Edison/Coll/LazyPairingHeap.hs
-index e41ce2e..3dcebe4 100644
---- a/edison-core/src/Data/Edison/Coll/LazyPairingHeap.hs
-+++ b/edison-core/src/Data/Edison/Coll/LazyPairingHeap.hs
-@@ -49,6 +49,7 @@ import Data.List (sort)
- import Data.Monoid
- import Data.Semigroup as SG
- import Control.Monad
-+import qualified Control.Monad.Fail as Fail
- import Test.QuickCheck
-
- moduleName :: String
-@@ -359,7 +360,7 @@ lookupAll y h = look h S.empty
- EQ -> S.lcons x $ look i $ look xs rest
- GT -> rest
-
--minView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
-+minView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
- minView E = fail "LazyPairingHeap.minView: empty heap"
- minView (H1 x xs) = return (x,xs)
- minView (H2 x h xs) = return (x,union h xs)
-@@ -369,7 +370,7 @@ minElem E = error "LazyPairingHeap.minElem: empty heap"
- minElem (H1 x _) = x
- minElem (H2 x _ _) = x
-
--maxView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
-+maxView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
- maxView E = fail "LazyPairingHeap.maxView: empty heap"
- maxView xs = return (y,xs')
- where (xs', y) = maxView' xs
-@@ -474,7 +475,7 @@ deleteMax = deleteMaxUsingMaxView
- lookup :: Ord a => a -> Heap a -> a
- lookup = lookupUsingLookupAll
-
--lookupM :: (Ord a, Monad m) => a -> Heap a -> m a
-+lookupM :: (Ord a, Fail.MonadFail m) => a -> Heap a -> m a
- lookupM = lookupMUsingLookupAll
-
- lookupWithDefault :: Ord a => a -> a -> Heap a -> a
-diff --git a/edison-core/src/Data/Edison/Coll/LeftistHeap.hs b/edison-core/src/Data/Edison/Coll/LeftistHeap.hs
-index 751394b..10ccf5a 100644
---- a/edison-core/src/Data/Edison/Coll/LeftistHeap.hs
-+++ b/edison-core/src/Data/Edison/Coll/LeftistHeap.hs
-@@ -47,6 +47,7 @@ import Data.Edison.Coll.Defaults
- import Data.Monoid
- import Data.Semigroup as SG
- import Control.Monad
-+import qualified Control.Monad.Fail as Fail
- import Test.QuickCheck
-
- moduleName :: String
-@@ -173,7 +174,7 @@ toSeq h = tol h S.empty
- where tol E rest = rest
- tol (L _ x a b) rest = S.lcons x (tol b (tol a rest))
-
--lookupM :: (Ord a, Monad m) => a -> Heap a -> m a
-+lookupM :: (Ord a, Fail.MonadFail m) => a -> Heap a -> m a
- lookupM _ E = fail "LeftistHeap.lookupM: XXX"
- lookupM x (L _ y a b) =
- case compare x y of
-@@ -299,7 +300,7 @@ partitionLT_GT y h = (h', C.unionList hs)
- (b', hs'') = collect b hs'
- in (node x a' b', hs'')
-
--minView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
-+minView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
- minView E = fail "LeftistHeap.minView: empty collection"
- minView (L _ x a b) = return (x, union a b)
-
-@@ -307,7 +308,7 @@ minElem :: Ord a => Heap a -> a
- minElem E = error "LeftistHeap.minElem: empty collection"
- minElem (L _ x _ _) = x
-
--maxView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
-+maxView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
- maxView E = fail "LeftistHeap.maxView: empty collection"
- maxView (L _ x E _) = return (x, E)
- maxView (L _ x a E) = return (y, L 1 x a' E)
-diff --git a/edison-core/src/Data/Edison/Coll/MinHeap.hs b/edison-core/src/Data/Edison/Coll/MinHeap.hs
-index ba38960..94e2f1b 100644
---- a/edison-core/src/Data/Edison/Coll/MinHeap.hs
-+++ b/edison-core/src/Data/Edison/Coll/MinHeap.hs
-@@ -46,6 +46,7 @@ import Data.Edison.Seq.Defaults (tokenMatch,maybeParens)
- import Data.Monoid
- import qualified Data.Semigroup as SG
- import Control.Monad
-+import qualified Control.Monad.Fail as Fail
- import Test.QuickCheck
-
- data Min h a = E | M a h deriving (Eq)
-@@ -75,7 +76,7 @@ strict :: (C.CollX h a,Ord a) => Min h a -> Min h a
-
- toSeq :: (C.Coll h a,S.Sequence s) => Min h a -> s a
- lookup :: (C.Coll h a,Ord a) => a -> Min h a -> a
--lookupM :: (C.Coll h a,Ord a,Monad m) => a -> Min h a -> m a
-+lookupM :: (C.Coll h a, Ord a, Fail.MonadFail m) => a -> Min h a -> m a
- lookupAll :: (C.Coll h a,Ord a,S.Sequence s) => a -> Min h a -> s a
- lookupWithDefault :: (C.Coll h a,Ord a) => a -> a -> Min h a -> a
- fold :: (C.Coll h a) => (a -> b -> b) -> b -> Min h a -> b
-@@ -100,9 +101,9 @@ partitionLT_GE :: (C.OrdColl h a,Ord a) => a -> Min h a -> (Min h a, Min h a)
- partitionLE_GT :: (C.OrdColl h a,Ord a) => a -> Min h a -> (Min h a, Min h a)
- partitionLT_GT :: (C.OrdColl h a,Ord a) => a -> Min h a -> (Min h a, Min h a)
-
--minView :: (C.OrdColl h a,Ord a,Monad m) => Min h a -> m (a, Min h a)
-+minView :: (C.OrdColl h a, Ord a, Fail.MonadFail m) => Min h a -> m (a, Min h a)
- minElem :: (C.OrdColl h a,Ord a) => Min h a -> a
--maxView :: (C.OrdColl h a,Ord a,Monad m) => Min h a -> m (a, Min h a)
-+maxView :: (C.OrdColl h a, Ord a, Fail.MonadFail m) => Min h a -> m (a, Min h a)
- maxElem :: (C.OrdColl h a,Ord a) => Min h a -> a
- foldr :: (C.OrdColl h a,Ord a) => (a -> b -> b) -> b -> Min h a -> b
- foldl :: (C.OrdColl h a,Ord a) => (b -> a -> b) -> b -> Min h a -> b
-diff --git a/edison-core/src/Data/Edison/Coll/SkewHeap.hs b/edison-core/src/Data/Edison/Coll/SkewHeap.hs
-index 1a05ebe..e55ba58 100644
---- a/edison-core/src/Data/Edison/Coll/SkewHeap.hs
-+++ b/edison-core/src/Data/Edison/Coll/SkewHeap.hs
-@@ -47,6 +47,7 @@ import Data.Edison.Coll.Defaults
- import Data.Monoid
- import Data.Semigroup as SG
- import Control.Monad
-+import qualified Control.Monad.Fail as Fail
-
- import Test.QuickCheck
-
-@@ -142,7 +143,7 @@ toSeq h = tol h S.empty
- where tol E rest = rest
- tol (T x a b) rest = S.lcons x (tol b (tol a rest))
-
--lookupM :: (Ord a, Monad m) => a -> Heap a -> m a
-+lookupM :: (Ord a, Fail.MonadFail m) => a -> Heap a -> m a
- lookupM _ E = fail "SkewHeap.lookupM: XXX"
- lookupM x (T y a b) =
- case compare x y of
-@@ -267,7 +268,7 @@ partitionLT_GT y h = (h', C.unionList hs)
- (b', hs'') = collect b hs'
- in (T x a' b', hs'')
-
--minView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
-+minView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
- minView E = fail "SkewHeap.minView: empty heap"
- minView (T x a b) = return (x, union a b)
-
-@@ -275,7 +276,7 @@ minElem :: Ord a => Heap a -> a
- minElem E = error "SkewHeap.minElem: empty collection"
- minElem (T x _ _) = x
-
--maxView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
-+maxView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
- maxView E = fail "SkewHeap.maxView: empty heap"
- maxView (T x E E) = return (x, E)
- maxView (T x a E) = return (y, T x a' E)
-diff --git a/edison-core/src/Data/Edison/Coll/SplayHeap.hs b/edison-core/src/Data/Edison/Coll/SplayHeap.hs
-index 4e3b061..6c950b7 100644
---- a/edison-core/src/Data/Edison/Coll/SplayHeap.hs
-+++ b/edison-core/src/Data/Edison/Coll/SplayHeap.hs
-@@ -50,6 +50,7 @@ import Data.Edison.Coll.Defaults
- import Data.Monoid
- import Data.Semigroup as SG
- import Control.Monad
-+import qualified Control.Monad.Fail as Fail
- import Test.QuickCheck
-
- moduleName :: String
-@@ -93,7 +94,7 @@ strict :: Heap a -> Heap a
-
- toSeq :: (Ord a, S.Sequence s) => Heap a -> s a
- lookup :: Ord a => a -> Heap a -> a
--lookupM :: (Ord a,Monad m) => a -> Heap a -> m a
-+lookupM :: (Ord a, Fail.MonadFail m) => a -> Heap a -> m a
- lookupAll :: (Ord a,S.Sequence s) => a -> Heap a -> s a
- lookupWithDefault :: Ord a => a -> a -> Heap a -> a
- fold :: Ord a => (a -> b -> b) -> b -> Heap a -> b
-@@ -118,9 +119,9 @@ partitionLT_GE :: Ord a => a -> Heap a -> (Heap a, Heap a)
- partitionLE_GT :: Ord a => a -> Heap a -> (Heap a, Heap a)
- partitionLT_GT :: Ord a => a -> Heap a -> (Heap a, Heap a)
-
--minView :: (Ord a,Monad m) => Heap a -> m (a, Heap a)
-+minView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
- minElem :: Ord a => Heap a -> a
--maxView :: (Ord a,Monad m) => Heap a -> m (a, Heap a)
-+maxView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
- maxElem :: Ord a => Heap a -> a
- foldr :: Ord a => (a -> b -> b) -> b -> Heap a -> b
- foldl :: Ord a => (b -> a -> b) -> b -> Heap a -> b
-diff --git a/edison-core/src/Data/Edison/Coll/StandardSet.hs b/edison-core/src/Data/Edison/Coll/StandardSet.hs
-index fcaf715..56df4bf 100644
---- a/edison-core/src/Data/Edison/Coll/StandardSet.hs
-+++ b/edison-core/src/Data/Edison/Coll/StandardSet.hs
-@@ -43,6 +43,7 @@ module Data.Edison.Coll.StandardSet (
-
- import Prelude hiding (null,foldr,foldl,foldr1,foldl1,lookup,filter)
- import qualified Prelude
-+import qualified Control.Monad.Fail as Fail
- import qualified Data.List
-
- import qualified Data.Edison.Coll as C
-@@ -73,7 +74,7 @@ strict :: Ord a => Set a -> Set a
-
- toSeq :: (Ord a,S.Sequence seq) => Set a -> seq a
- lookup :: Ord a => a -> Set a -> a
--lookupM :: (Ord a,Monad m) => a -> Set a -> m a
-+lookupM :: (Ord a, Monad m, Fail.MonadFail m) => a -> Set a -> m a
- lookupAll :: (Ord a,S.Sequence seq) => a -> Set a -> seq a
- lookupWithDefault :: Ord a => a -> a -> Set a -> a
- fold :: (a -> b -> b) -> b -> Set a -> b
-@@ -98,9 +99,9 @@ partitionLT_GE :: Ord a => a -> Set a -> (Set a, Set a)
- partitionLE_GT :: Ord a => a -> Set a -> (Set a, Set a)
- partitionLT_GT :: Ord a => a -> Set a -> (Set a, Set a)
-
--minView :: (Ord a,Monad m) => Set a -> m (a, Set a)
-+minView :: (Ord a, Monad m, Fail.MonadFail m) => Set a -> m (a, Set a)
- minElem :: Set a -> a
--maxView :: (Ord a,Monad m) => Set a -> m (a, Set a)
-+maxView :: (Ord a, Monad m, Fail.MonadFail m) => Set a -> m (a, Set a)
- maxElem :: Set a -> a
- foldr :: (a -> b -> b) -> b -> Set a -> b
- foldl :: (b -> a -> b) -> b -> Set a -> b
-diff --git a/edison-core/src/Data/Edison/Coll/UnbalancedSet.hs b/edison-core/src/Data/Edison/Coll/UnbalancedSet.hs
-index 03cb856..d7975d0 100644
---- a/edison-core/src/Data/Edison/Coll/UnbalancedSet.hs
-+++ b/edison-core/src/Data/Edison/Coll/UnbalancedSet.hs
-@@ -43,6 +43,7 @@ module Data.Edison.Coll.UnbalancedSet (
-
- import Prelude hiding (null,foldr,foldl,foldr1,foldl1,lookup,filter)
- import qualified Prelude
-+import qualified Control.Monad.Fail as Fail
- import qualified Data.Edison.Coll as C
- import qualified Data.Edison.Seq as S
- import Data.Edison.Coll.Defaults
-@@ -70,7 +71,7 @@ strict :: Set a -> Set a
-
- toSeq :: (Ord a,S.Sequence seq) => Set a -> seq a
- lookup :: Ord a => a -> Set a -> a
--lookupM :: (Ord a,Monad m) => a -> Set a -> m a
-+lookupM :: (Ord a, Fail.MonadFail m) => a -> Set a -> m a
- lookupAll :: (Ord a,S.Sequence seq) => a -> Set a -> seq a
- lookupWithDefault :: Ord a => a -> a -> Set a -> a
- fold :: (a -> b -> b) -> b -> Set a -> b
-@@ -95,9 +96,9 @@ partitionLT_GE :: Ord a => a -> Set a -> (Set a, Set a)
- partitionLE_GT :: Ord a => a -> Set a -> (Set a, Set a)
- partitionLT_GT :: Ord a => a -> Set a -> (Set a, Set a)
-
--minView :: (Monad m) => Set a -> m (a, Set a)
-+minView :: (Fail.MonadFail m) => Set a -> m (a, Set a)
- minElem :: Set a -> a
--maxView :: (Monad m) => Set a -> m (a, Set a)
-+maxView :: (Fail.MonadFail m) => Set a -> m (a, Set a)
- maxElem :: Set a -> a
- foldr :: (a -> b -> b) -> b -> Set a -> b
- foldl :: (b -> a -> b) -> b -> Set a -> b
-diff --git a/edison-core/src/Data/Edison/Concrete/FingerTree.hs b/edison-core/src/Data/Edison/Concrete/FingerTree.hs
-index 47f766c..c6a2ac0 100644
---- a/edison-core/src/Data/Edison/Concrete/FingerTree.hs
-+++ b/edison-core/src/Data/Edison/Concrete/FingerTree.hs
-@@ -81,6 +81,7 @@ import Test.QuickCheck
- import Data.Edison.Prelude
-
- import Control.Monad (liftM2, liftM3, liftM4)
-+import qualified Control.Monad.Fail as Fail
-
-
- infixr 5 `lcons`
-@@ -334,7 +335,7 @@ null Empty = True
- null _ = False
-
- -- | /O(1)/. Analyse the left end of a sequence.
--lview :: (Measured v a, Monad m) => FingerTree v a -> m (a,FingerTree v a)
-+lview :: (Measured v a, Fail.MonadFail m) => FingerTree v a -> m (a,FingerTree v a)
- lview Empty = fail "FingerTree.lview: empty tree"
- lview (Single x) = return (x, Empty)
- lview (Deep _ (One x) m sf) = return . (,) x $
-@@ -357,7 +358,7 @@ ltailDigit (Four _ b c d) = Three b c d
- ltailDigit _ = error "FingerTree.ltailDigit: bug!"
-
- -- | /O(1)/. Analyse the right end of a sequence.
--rview :: (Measured v a, Monad m) => FingerTree v a -> m (a, FingerTree v a)
-+rview :: (Measured v a, Fail.MonadFail m) => FingerTree v a -> m (a, FingerTree v a)
- rview Empty = fail "FingerTree.rview: empty tree"
- rview (Single x) = return (x, Empty)
- rview (Deep _ pr m (One x)) = return . (,) x $
-diff --git a/edison-core/src/Data/Edison/Seq/BankersQueue.hs b/edison-core/src/Data/Edison/Seq/BankersQueue.hs
-index 6dac746..0ab24c9 100644
---- a/edison-core/src/Data/Edison/Seq/BankersQueue.hs
-+++ b/edison-core/src/Data/Edison/Seq/BankersQueue.hs
-@@ -51,11 +51,13 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
-
- import qualified Control.Applicative as App
-
-+import Data.Edison.Prelude ( runFail_ )
- import qualified Data.Edison.Seq as S ( Sequence(..) )
- import Data.Edison.Seq.Defaults
- import qualified Data.Edison.Seq.ListSeq as L
- import Data.Monoid
- import Data.Semigroup as SG
-+import qualified Control.Monad.Fail as Fail
- import Control.Monad.Identity
- import Test.QuickCheck
-
-@@ -66,16 +68,16 @@ singleton :: a -> Seq a
- lcons :: a -> Seq a -> Seq a
- rcons :: a -> Seq a -> Seq a
- append :: Seq a -> Seq a -> Seq a
--lview :: (Monad m) => Seq a -> m (a, Seq a)
-+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- lhead :: Seq a -> a
--lheadM :: (Monad m) => Seq a -> m a
-+lheadM :: (Fail.MonadFail m) => Seq a -> m a
- ltail :: Seq a -> Seq a
--ltailM :: (Monad m) => Seq a -> m (Seq a)
--rview :: (Monad m) => Seq a -> m (a, Seq a)
-+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
-+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- rhead :: Seq a -> a
--rheadM :: (Monad m) => Seq a -> m a
-+rheadM :: (Fail.MonadFail m) => Seq a -> m a
- rtail :: Seq a -> Seq a
--rtailM :: (Monad m) => Seq a -> m (Seq a)
-+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
- null :: Seq a -> Bool
- size :: Seq a -> Int
- concat :: Seq (Seq a) -> Seq a
-@@ -106,7 +108,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
- copy :: Int -> a -> Seq a
- inBounds :: Int -> Seq a -> Bool
- lookup :: Int -> Seq a -> a
--lookupM :: (Monad m) => Int -> Seq a -> m a
-+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
- lookupWithDefault :: a -> Int -> Seq a -> a
- update :: Int -> a -> Seq a -> Seq a
- adjust :: (a -> a) -> Int -> Seq a -> Seq a
-@@ -263,7 +265,7 @@ copy n x
-
- -- reduce1: given sizes could do more effective job of dividing evenly!
-
--lookup idx q = runIdentity (lookupM idx q)
-+lookup idx q = runFail_ (lookupM idx q)
-
- lookupM idx (Q i xs ys j)
- | idx < i = L.lookupM idx xs
-diff --git a/edison-core/src/Data/Edison/Seq/BinaryRandList.hs b/edison-core/src/Data/Edison/Seq/BinaryRandList.hs
-index b01b9b8..e772b65 100644
---- a/edison-core/src/Data/Edison/Seq/BinaryRandList.hs
-+++ b/edison-core/src/Data/Edison/Seq/BinaryRandList.hs
-@@ -55,14 +55,15 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
- zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
-
- import qualified Control.Applicative as App
--import Control.Monad.Identity
- import Data.Maybe
-
-+import Data.Edison.Prelude ( runFail_ )
- import qualified Data.Edison.Seq as S ( Sequence(..) )
- import Data.Edison.Seq.Defaults
- import Data.Monoid
- import Data.Semigroup as SG
- import Control.Monad
-+import qualified Control.Monad.Fail as Fail
- import Test.QuickCheck
-
- -- signatures for exported functions
-@@ -72,16 +73,16 @@ singleton :: a -> Seq a
- lcons :: a -> Seq a -> Seq a
- rcons :: a -> Seq a -> Seq a
- append :: Seq a -> Seq a -> Seq a
--lview :: (Monad m) => Seq a -> m (a, Seq a)
-+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- lhead :: Seq a -> a
--lheadM :: (Monad m) => Seq a -> m a
-+lheadM :: (Fail.MonadFail m) => Seq a -> m a
- ltail :: Seq a -> Seq a
--ltailM :: (Monad m) => Seq a -> m (Seq a)
--rview :: (Monad m) => Seq a -> m (a, Seq a)
-+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
-+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- rhead :: Seq a -> a
--rheadM :: (Monad m) => Seq a -> m a
-+rheadM :: (Fail.MonadFail m) => Seq a -> m a
- rtail :: Seq a -> Seq a
--rtailM :: (Monad m) => Seq a -> m (Seq a)
-+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
- null :: Seq a -> Bool
- size :: Seq a -> Int
- concat :: Seq (Seq a) -> Seq a
-@@ -112,7 +113,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
- copy :: Int -> a -> Seq a
- inBounds :: Int -> Seq a -> Bool
- lookup :: Int -> Seq a -> a
--lookupM :: (Monad m) => Int -> Seq a -> m a
-+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
- lookupWithDefault :: a -> Int -> Seq a -> a
- update :: Int -> a -> Seq a -> Seq a
- adjust :: (a -> a) -> Int -> Seq a -> Seq a
-@@ -267,7 +268,7 @@ inBounds i xs = (i >= 0) && inb xs i
- inb (Even ps) i = inb ps (half i)
- inb (Odd _ ps) i = (i == 0) || inb ps (half (i-1))
-
--lookup i xs = runIdentity (lookupM i xs)
-+lookup i xs = runFail_ (lookupM i xs)
-
- lookupM i xs
- | i < 0 = fail "BinaryRandList.lookup: bad subscript"
-diff --git a/edison-core/src/Data/Edison/Seq/BraunSeq.hs b/edison-core/src/Data/Edison/Seq/BraunSeq.hs
-index 7f6f33b..11236e3 100644
---- a/edison-core/src/Data/Edison/Seq/BraunSeq.hs
-+++ b/edison-core/src/Data/Edison/Seq/BraunSeq.hs
-@@ -72,6 +72,7 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
- zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
-
- import qualified Control.Applicative as App
-+import qualified Control.Monad.Fail as Fail
- import Control.Monad.Identity
- import Data.Maybe
- import Data.Monoid
-@@ -79,6 +80,7 @@ import Data.Semigroup as SG
- import Test.QuickCheck
-
-
-+import Data.Edison.Prelude ( runFail_ )
- import qualified Data.Edison.Seq as S ( Sequence(..) )
- import Data.Edison.Seq.Defaults
- import qualified Data.Edison.Seq.ListSeq as L
-@@ -91,16 +93,16 @@ singleton :: a -> Seq a
- lcons :: a -> Seq a -> Seq a
- rcons :: a -> Seq a -> Seq a
- append :: Seq a -> Seq a -> Seq a
--lview :: (Monad m) => Seq a -> m (a, Seq a)
-+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- lhead :: Seq a -> a
--lheadM :: (Monad m) => Seq a -> m a
-+lheadM :: (Fail.MonadFail m) => Seq a -> m a
- ltail :: Seq a -> Seq a
--ltailM :: (Monad m) => Seq a -> m (Seq a)
--rview :: (Monad m) => Seq a -> m (a, Seq a)
-+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
-+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- rhead :: Seq a -> a
--rheadM :: (Monad m) => Seq a -> m a
-+rheadM :: (Fail.MonadFail m) => Seq a -> m a
- rtail :: Seq a -> Seq a
--rtailM :: (Monad m) => Seq a -> m (Seq a)
-+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
- null :: Seq a -> Bool
- size :: Seq a -> Int
- concat :: Seq (Seq a) -> Seq a
-@@ -131,7 +133,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
- copy :: Int -> a -> Seq a
- inBounds :: Int -> Seq a -> Bool
- lookup :: Int -> Seq a -> a
--lookupM :: (Monad m) => Int -> Seq a -> m a
-+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
- lookupWithDefault :: a -> Int -> Seq a -> a
- update :: Int -> a -> Seq a -> Seq a
- adjust :: (a -> a) -> Int -> Seq a -> Seq a
-@@ -344,7 +346,7 @@ inBounds i xs = (i >= 0) && inb xs i
- | i == 0 = True
- | otherwise = inb b (half i - 1)
-
--lookup i xs = runIdentity (lookupM i xs)
-+lookup i xs = runFail_ (lookupM i xs)
-
- lookupM i xs
- | i < 0 = fail "BraunSeq.lookupM: bad subscript"
-diff --git a/edison-core/src/Data/Edison/Seq/Defaults.hs b/edison-core/src/Data/Edison/Seq/Defaults.hs
-index ed593dc..eae6a09 100644
---- a/edison-core/src/Data/Edison/Seq/Defaults.hs
-+++ b/edison-core/src/Data/Edison/Seq/Defaults.hs
-@@ -17,9 +17,11 @@ 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.Fail as Fail
- import Control.Monad.Identity
- import Data.Char (isSpace)
-
-+import Data.Edison.Prelude ( runFail_ )
- import Data.Edison.Seq
- import qualified Data.Edison.Seq.ListSeq as L
-
-@@ -33,7 +35,7 @@ appendUsingFoldr :: Sequence s => s a -> s a -> s a
- appendUsingFoldr s t | null t = s
- | otherwise = foldr lcons t s
-
--rviewDefault :: (Monad m, Sequence s) => s a -> m (a, s a)
-+rviewDefault :: (Fail.MonadFail m, Sequence s) => s a -> m (a, s a)
- rviewDefault xs
- | null xs = fail $ instanceName xs ++ ".rview: empty sequence"
- | otherwise = return (rhead xs, rtail xs)
-@@ -49,7 +51,7 @@ rtailUsingLview xs =
- Nothing -> empty
- Just (y, ys) -> lcons x (rt y ys)
-
--rtailMUsingLview :: (Monad m,Sequence s) => s a -> m (s a)
-+rtailMUsingLview :: (Fail.MonadFail m, Sequence s) => s a -> m (s a)
- rtailMUsingLview xs =
- case lview xs of
- Nothing -> fail $ instanceName xs ++ ".rtailM: empty sequence"
-@@ -200,7 +202,7 @@ inBoundsUsingSize :: Sequence s => Int -> s a -> Bool
- inBoundsUsingSize i s = i >= 0 && i < size s
-
- lookupUsingLookupM :: Sequence s => Int -> s a -> a
--lookupUsingLookupM i s = runIdentity (lookupM i s)
-+lookupUsingLookupM i s = runFail_ (lookupM i s)
-
- lookupUsingDrop :: Sequence s => Int -> s a -> a
- lookupUsingDrop i s
-@@ -220,7 +222,7 @@ lookupWithDefaultUsingDrop d i s
- | otherwise = lhead s'
- where s' = drop i s
-
--lookupMUsingDrop :: (Monad m, Sequence s) => Int -> s a -> m a
-+lookupMUsingDrop :: (Fail.MonadFail m, Sequence s) => Int -> s a -> m a
- lookupMUsingDrop i s
- -- XXX better error message!
- | i < 0 || null s' = fail $ instanceName s
-diff --git a/edison-core/src/Data/Edison/Seq/FingerSeq.hs b/edison-core/src/Data/Edison/Seq/FingerSeq.hs
-index c74c70b..a34254c 100644
---- a/edison-core/src/Data/Edison/Seq/FingerSeq.hs
-+++ b/edison-core/src/Data/Edison/Seq/FingerSeq.hs
-@@ -37,9 +37,10 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
- zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
-
- import qualified Control.Applicative as App
--import Data.Edison.Prelude (measure, Measured())
-+import Data.Edison.Prelude (measure, Measured(), runFail_)
- import qualified Data.Edison.Seq as S
- import Data.Edison.Seq.Defaults
-+import qualified Control.Monad.Fail as Fail
- import Control.Monad.Identity
- import Data.Monoid
- import Data.Semigroup as SG
-@@ -87,16 +88,16 @@ singleton :: a -> Seq a
- lcons :: a -> Seq a -> Seq a
- rcons :: a -> Seq a -> Seq a
- append :: Seq a -> Seq a -> Seq a
--lview :: (Monad m) => Seq a -> m (a, Seq a)
-+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- lhead :: Seq a -> a
--lheadM :: (Monad m) => Seq a -> m a
-+lheadM :: (Fail.MonadFail m) => Seq a -> m a
- ltail :: Seq a -> Seq a
--ltailM :: (Monad m) => Seq a -> m (Seq a)
--rview :: (Monad m) => Seq a -> m (a, Seq a)
-+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
-+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- rhead :: Seq a -> a
--rheadM :: (Monad m) => Seq a -> m a
-+rheadM :: (Fail.MonadFail m) => Seq a -> m a
- rtail :: Seq a -> Seq a
--rtailM :: (Monad m) => Seq a -> m (Seq a)
-+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
- null :: Seq a -> Bool
- size :: Seq a -> Int
- concat :: Seq (Seq a) -> Seq a
-@@ -127,7 +128,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
- copy :: Int -> a -> Seq a
- inBounds :: Int -> Seq a -> Bool
- lookup :: Int -> Seq a -> a
--lookupM :: (Monad m) => Int -> Seq a -> m a
-+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
- lookupWithDefault :: a -> Int -> Seq a -> a
- update :: Int -> a -> Seq a -> Seq a
- adjust :: (a -> a) -> Int -> Seq a -> Seq a
-@@ -206,10 +207,10 @@ lheadM xs = lview xs >>= return . fst
- ltailM xs = lview xs >>= return . snd
- rheadM xs = rview xs >>= return . fst
- rtailM xs = rview xs >>= return . snd
--lhead = runIdentity . lheadM
--ltail = runIdentity . ltailM
--rhead = runIdentity . rheadM
--rtail = runIdentity . rtailM
-+lhead = runFail_ . lheadM
-+ltail = runFail_ . ltailM
-+rhead = runFail_ . rheadM
-+rtail = runFail_ . rtailM
-
- fold = foldr
- fold' = foldr'
-diff --git a/edison-core/src/Data/Edison/Seq/JoinList.hs b/edison-core/src/Data/Edison/Seq/JoinList.hs
-index 6922023..05855ba 100644
---- a/edison-core/src/Data/Edison/Seq/JoinList.hs
-+++ b/edison-core/src/Data/Edison/Seq/JoinList.hs
-@@ -57,6 +57,7 @@ import qualified Control.Applicative as App
-
- import Data.Edison.Seq.Defaults
- import Control.Monad
-+import qualified Control.Monad.Fail as Fail
- import Data.Monoid
- import Data.Semigroup as SG
- import Test.QuickCheck
-@@ -68,16 +69,16 @@ singleton :: a -> Seq a
- lcons :: a -> Seq a -> Seq a
- rcons :: a -> Seq a -> Seq a
- append :: Seq a -> Seq a -> Seq a
--lview :: (Monad m) => Seq a -> m (a, Seq a)
-+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- lhead :: Seq a -> a
--lheadM :: (Monad m) => Seq a -> m a
-+lheadM :: (Fail.MonadFail m) => Seq a -> m a
- ltail :: Seq a -> Seq a
--ltailM :: (Monad m) => Seq a -> m (Seq a)
--rview :: (Monad m) => Seq a -> m (a, Seq a)
-+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
-+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- rhead :: Seq a -> a
--rheadM :: (Monad m) => Seq a -> m a
-+rheadM :: (Fail.MonadFail m) => Seq a -> m a
- rtail :: Seq a -> Seq a
--rtailM :: (Monad m) => Seq a -> m (Seq a)
-+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
- null :: Seq a -> Bool
- size :: Seq a -> Int
- concat :: Seq (Seq a) -> Seq a
-@@ -108,7 +109,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
- copy :: Int -> a -> Seq a
- inBounds :: Int -> Seq a -> Bool
- lookup :: Int -> Seq a -> a
--lookupM :: (Monad m) => Int -> Seq a -> m a
-+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
- lookupWithDefault :: a -> Int -> Seq a -> a
- update :: Int -> a -> Seq a -> Seq a
- adjust :: (a -> a) -> Int -> Seq a -> Seq a
-diff --git a/edison-core/src/Data/Edison/Seq/MyersStack.hs b/edison-core/src/Data/Edison/Seq/MyersStack.hs
-index 30eb197..eca46a5 100644
---- a/edison-core/src/Data/Edison/Seq/MyersStack.hs
-+++ b/edison-core/src/Data/Edison/Seq/MyersStack.hs
-@@ -49,8 +49,10 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
- zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
-
- import qualified Control.Applicative as App
-+import Data.Edison.Prelude ( runFail_ )
- import qualified Data.Edison.Seq as S ( Sequence(..) )
- import Data.Edison.Seq.Defaults
-+import qualified Control.Monad.Fail as Fail
- import Control.Monad.Identity
- import Data.Monoid
- import Data.Semigroup as SG
-@@ -63,16 +65,16 @@ singleton :: a -> Seq a
- lcons :: a -> Seq a -> Seq a
- rcons :: a -> Seq a -> Seq a
- append :: Seq a -> Seq a -> Seq a
--lview :: (Monad m) => Seq a -> m (a, Seq a)
-+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- lhead :: Seq a -> a
--lheadM :: (Monad m) => Seq a -> m a
-+lheadM :: (Fail.MonadFail m) => Seq a -> m a
- ltail :: Seq a -> Seq a
--ltailM :: (Monad m) => Seq a -> m (Seq a)
--rview :: (Monad m) => Seq a -> m (a, Seq a)
-+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
-+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- rhead :: Seq a -> a
--rheadM :: (Monad m) => Seq a -> m a
-+rheadM :: (Fail.MonadFail m) => Seq a -> m a
- rtail :: Seq a -> Seq a
--rtailM :: (Monad m) => Seq a -> m (Seq a)
-+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
- null :: Seq a -> Bool
- size :: Seq a -> Int
- concat :: Seq (Seq a) -> Seq a
-@@ -103,7 +105,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
- copy :: Int -> a -> Seq a
- inBounds :: Int -> Seq a -> Bool
- lookup :: Int -> Seq a -> a
--lookupM :: (Monad m) => Int -> Seq a -> m a
-+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
- lookupWithDefault :: a -> Int -> Seq a -> a
- update :: Int -> a -> Seq a -> Seq a
- adjust :: (a -> a) -> Int -> Seq a -> Seq a
-@@ -246,7 +248,7 @@ inBounds i xs = inb xs i
- | i < j = (i >= 0)
- | otherwise = inb xs' (i - j)
-
--lookup i xs = runIdentity (lookupM i xs)
-+lookup i xs = runFail_ (lookupM i xs)
-
- lookupM i xs = look xs i
- where look E _ = fail "MyersStack.lookup: bad subscript"
-diff --git a/edison-core/src/Data/Edison/Seq/RandList.hs b/edison-core/src/Data/Edison/Seq/RandList.hs
-index 8fe97bd..8d2d38b 100644
---- a/edison-core/src/Data/Edison/Seq/RandList.hs
-+++ b/edison-core/src/Data/Edison/Seq/RandList.hs
-@@ -55,8 +55,10 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
-
- import qualified Control.Applicative as App
-
-+import Data.Edison.Prelude ( runFail_ )
- import qualified Data.Edison.Seq as S( Sequence(..) )
- import Data.Edison.Seq.Defaults
-+import qualified Control.Monad.Fail as Fail
- import Control.Monad.Identity
- import Data.Monoid
- import Data.Semigroup as SG
-@@ -69,16 +71,16 @@ singleton :: a -> Seq a
- lcons :: a -> Seq a -> Seq a
- rcons :: a -> Seq a -> Seq a
- append :: Seq a -> Seq a -> Seq a
--lview :: (Monad m) => Seq a -> m (a, Seq a)
-+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- lhead :: Seq a -> a
--lheadM :: (Monad m) => Seq a -> m a
-+lheadM :: (Fail.MonadFail m) => Seq a -> m a
- ltail :: Seq a -> Seq a
--ltailM :: (Monad m) => Seq a -> m (Seq a)
--rview :: (Monad m) => Seq a -> m (a, Seq a)
-+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
-+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- rhead :: Seq a -> a
--rheadM :: (Monad m) => Seq a -> m a
-+rheadM :: (Fail.MonadFail m) => Seq a -> m a
- rtail :: Seq a -> Seq a
--rtailM :: (Monad m) => Seq a -> m (Seq a)
-+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
- null :: Seq a -> Bool
- size :: Seq a -> Int
- concat :: Seq (Seq a) -> Seq a
-@@ -109,7 +111,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
- copy :: Int -> a -> Seq a
- inBounds :: Int -> Seq a -> Bool
- lookup :: Int -> Seq a -> a
--lookupM :: (Monad m) => Int -> Seq a -> m a
-+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
- lookupWithDefault :: a -> Int -> Seq a -> a
- update :: Int -> a -> Seq a -> Seq a
- adjust :: (a -> a) -> Int -> Seq a -> Seq a
-@@ -269,7 +271,7 @@ inBounds i xs = inb xs i
- | i < j = (i >= 0)
- | otherwise = inb xs (i - j)
-
--lookup i xs = runIdentity (lookupM i xs)
-+lookup i xs = runFail_ (lookupM i xs)
-
- lookupM i xs = look xs i
- where look E _ = fail "RandList.lookup bad subscript"
-diff --git a/edison-core/src/Data/Edison/Seq/RevSeq.hs b/edison-core/src/Data/Edison/Seq/RevSeq.hs
-index 3652c7b..87deea6 100644
---- a/edison-core/src/Data/Edison/Seq/RevSeq.hs
-+++ b/edison-core/src/Data/Edison/Seq/RevSeq.hs
-@@ -62,6 +62,7 @@ import qualified Data.Edison.Seq as S
- import qualified Data.Edison.Seq.ListSeq as L
- import Data.Edison.Seq.Defaults -- only used by concatMap
- import Control.Monad
-+import qualified Control.Monad.Fail as Fail
- import Data.Monoid
- import Data.Semigroup as SG
- import Test.QuickCheck
-@@ -75,16 +76,16 @@ singleton :: S.Sequence s => a -> Rev s a
- lcons :: S.Sequence s => a -> Rev s a -> Rev s a
- rcons :: S.Sequence s => a -> Rev s a -> Rev s a
- append :: S.Sequence s => Rev s a -> Rev s a -> Rev s a
--lview :: (S.Sequence s, Monad m) => Rev s a -> m (a, Rev s a)
-+lview :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m (a, Rev s a)
- lhead :: S.Sequence s => Rev s a -> a
--lheadM :: (S.Sequence s, Monad m) => Rev s a -> m a
-+lheadM :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m a
- ltail :: S.Sequence s => Rev s a -> Rev s a
--ltailM :: (S.Sequence s, Monad m) => Rev s a -> m (Rev s a)
--rview :: (S.Sequence s, Monad m) => Rev s a -> m (a, Rev s a)
-+ltailM :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m (Rev s a)
-+rview :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m (a, Rev s a)
- rhead :: S.Sequence s => Rev s a -> a
--rheadM :: (S.Sequence s, Monad m) => Rev s a -> m a
-+rheadM :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m a
- rtail :: S.Sequence s => Rev s a -> Rev s a
--rtailM :: (S.Sequence s, Monad m) => Rev s a -> m (Rev s a)
-+rtailM :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m (Rev s a)
- null :: S.Sequence s => Rev s a -> Bool
- size :: S.Sequence s => Rev s a -> Int
- concat :: S.Sequence s => Rev s (Rev s a) -> Rev s a
-@@ -115,7 +116,7 @@ reduce1' :: S.Sequence s => (a -> a -> a) -> Rev s a -> a
- copy :: S.Sequence s => Int -> a -> Rev s a
- inBounds :: S.Sequence s => Int -> Rev s a -> Bool
- lookup :: S.Sequence s => Int -> Rev s a -> a
--lookupM :: (S.Sequence s, Monad m) => Int -> Rev s a -> m a
-+lookupM :: (S.Sequence s, Fail.MonadFail m) => Int -> Rev s a -> m a
- lookupWithDefault :: S.Sequence s => a -> Int -> Rev s a -> a
- update :: S.Sequence s => Int -> a -> Rev s a -> Rev s a
- adjust :: S.Sequence s => (a -> a) -> Int -> Rev s a -> Rev s a
-diff --git a/edison-core/src/Data/Edison/Seq/SimpleQueue.hs b/edison-core/src/Data/Edison/Seq/SimpleQueue.hs
-index 64592b6..754108f 100644
---- a/edison-core/src/Data/Edison/Seq/SimpleQueue.hs
-+++ b/edison-core/src/Data/Edison/Seq/SimpleQueue.hs
-@@ -59,6 +59,7 @@ import qualified Data.Edison.Seq.ListSeq as L
- import Data.Monoid
- import Data.Semigroup as SG
- import Control.Monad
-+import qualified Control.Monad.Fail as Fail
- import Test.QuickCheck
-
- -- signatures for exported functions
-@@ -68,16 +69,16 @@ singleton :: a -> Seq a
- lcons :: a -> Seq a -> Seq a
- rcons :: a -> Seq a -> Seq a
- append :: Seq a -> Seq a -> Seq a
--lview :: (Monad m) => Seq a -> m (a, Seq a)
-+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- lhead :: Seq a -> a
--lheadM :: (Monad m) => Seq a -> m a
-+lheadM :: (Fail.MonadFail m) => Seq a -> m a
- ltail :: Seq a -> Seq a
--ltailM :: (Monad m) => Seq a -> m (Seq a)
--rview :: (Monad m) => Seq a -> m (a, Seq a)
-+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
-+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
- rhead :: Seq a -> a
--rheadM :: (Monad m) => Seq a -> m a
-+rheadM :: (Fail.MonadFail m) => Seq a -> m a
- rtail :: Seq a -> Seq a
--rtailM :: (Monad m) => Seq a -> m (Seq a)
-+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
- null :: Seq a -> Bool
- size :: Seq a -> Int
- concat :: Seq (Seq a) -> Seq a
-@@ -108,7 +109,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
- copy :: Int -> a -> Seq a
- inBounds :: Int -> Seq a -> Bool
- lookup :: Int -> Seq a -> a
--lookupM :: (Monad m) => Int -> Seq a -> m a
-+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
- lookupWithDefault :: a -> Int -> Seq a -> a
- update :: Int -> a -> Seq a -> Seq a
- adjust :: (a -> a) -> Int -> Seq a -> Seq a
-diff --git a/edison-core/src/Data/Edison/Seq/SizedSeq.hs b/edison-core/src/Data/Edison/Seq/SizedSeq.hs
-index a50b800..65c0ee9 100644
---- a/edison-core/src/Data/Edison/Seq/SizedSeq.hs
-+++ b/edison-core/src/Data/Edison/Seq/SizedSeq.hs
-@@ -54,6 +54,7 @@ import Data.Edison.Seq.Defaults -- only used by concatMap
- import Data.Monoid
- import Data.Semigroup as SG
- import Control.Monad
-+import qualified Control.Monad.Fail as Fail
- import Test.QuickCheck
-
-
-@@ -65,16 +66,16 @@ singleton :: S.Sequence s => a -> Sized s a
- lcons :: S.Sequence s => a -> Sized s a -> Sized s a
- rcons :: S.Sequence s => a -> Sized s a -> Sized s a
- append :: S.Sequence s => Sized s a -> Sized s a -> Sized s a
--lview :: (S.Sequence s, Monad m) => Sized s a -> m (a, Sized s a)
-+lview :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m (a, Sized s a)
- lhead :: S.Sequence s => Sized s a -> a
--lheadM :: (S.Sequence s, Monad m) => Sized s a -> m a
-+lheadM :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m a
- ltail :: S.Sequence s => Sized s a -> Sized s a
--ltailM :: (S.Sequence s, Monad m) => Sized s a -> m (Sized s a)
--rview :: (S.Sequence s, Monad m) => Sized s a -> m (a, Sized s a)
-+ltailM :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m (Sized s a)
-+rview :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m (a, Sized s a)
- rhead :: S.Sequence s => Sized s a -> a
--rheadM :: (S.Sequence s, Monad m) => Sized s a -> m a
-+rheadM :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m a
- rtail :: S.Sequence s => Sized s a -> Sized s a
--rtailM :: (S.Sequence s, Monad m) => Sized s a -> m (Sized s a)
-+rtailM :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m (Sized s a)
- null :: S.Sequence s => Sized s a -> Bool
- size :: S.Sequence s => Sized s a -> Int
- concat :: S.Sequence s => Sized s (Sized s a) -> Sized s a
-@@ -105,7 +106,7 @@ reduce1' :: S.Sequence s => (a -> a -> a) -> Sized s a -> a
- copy :: S.Sequence s => Int -> a -> Sized s a
- inBounds :: S.Sequence s => Int -> Sized s a -> Bool
- lookup :: S.Sequence s => Int -> Sized s a -> a
--lookupM :: (S.Sequence s, Monad m) => Int -> Sized s a -> m a
-+lookupM :: (S.Sequence s, Fail.MonadFail m) => Int -> Sized s a -> m a
- lookupWithDefault :: S.Sequence s => a -> Int -> Sized s a -> a
- update :: S.Sequence s => Int -> a -> Sized s a -> Sized s a
- adjust :: S.Sequence s => (a -> a) -> Int -> Sized s a -> Sized s a
Copied: haskell-edisoncore/repos/community-staging-x86_64/ghc-8.8.patch (from rev 562776, haskell-edisoncore/trunk/ghc-8.8.patch)
===================================================================
--- ghc-8.8.patch (rev 0)
+++ ghc-8.8.patch 2020-02-05 07:41:31 UTC (rev 562777)
@@ -0,0 +1,1309 @@
+From 8da6c0f7d8666766e2f0693425c347c0adb492dc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andr=C3=A9s=20Sicard-Ram=C3=ADrez?= <asr at eafit.edu.co>
+Date: Thu, 4 Jul 2019 18:15:17 -0500
+Subject: [PATCH] Supported GHC 8.8.1.
+
+All changes were required by the MonadFail proposal.
+---
+ edison-api/EdisonAPI.cabal | 2 ++
+ edison-api/src/Data/Edison/Assoc.hs | 14 ++++++-----
+ edison-api/src/Data/Edison/Coll.hs | 7 +++---
+ edison-api/src/Data/Edison/Prelude.hs | 16 ++++++++++++
+ edison-api/src/Data/Edison/Seq.hs | 15 +++++------
+ edison-api/src/Data/Edison/Seq/ListSeq.hs | 20 +++++++--------
+ edison-core/EdisonCore.cabal | 6 +++--
+ .../src/Data/Edison/Assoc/AssocList.hs | 19 +++++++-------
+ edison-core/src/Data/Edison/Assoc/Defaults.hs | 4 ++-
+ .../src/Data/Edison/Assoc/PatriciaLoMap.hs | 17 +++++++------
+ .../src/Data/Edison/Assoc/StandardMap.hs | 13 +++++-----
+ .../src/Data/Edison/Assoc/TernaryTrie.hs | 22 ++++++++--------
+ edison-core/src/Data/Edison/Coll/Defaults.hs | 9 ++++---
+ edison-core/src/Data/Edison/Coll/EnumSet.hs | 7 +++---
+ .../src/Data/Edison/Coll/LazyPairingHeap.hs | 7 +++---
+ .../src/Data/Edison/Coll/LeftistHeap.hs | 7 +++---
+ edison-core/src/Data/Edison/Coll/MinHeap.hs | 7 +++---
+ edison-core/src/Data/Edison/Coll/SkewHeap.hs | 7 +++---
+ edison-core/src/Data/Edison/Coll/SplayHeap.hs | 7 +++---
+ .../src/Data/Edison/Coll/StandardSet.hs | 7 +++---
+ .../src/Data/Edison/Coll/UnbalancedSet.hs | 7 +++---
+ .../src/Data/Edison/Concrete/FingerTree.hs | 5 ++--
+ .../src/Data/Edison/Seq/BankersQueue.hs | 18 +++++++------
+ .../src/Data/Edison/Seq/BinaryRandList.hs | 19 +++++++-------
+ edison-core/src/Data/Edison/Seq/BraunSeq.hs | 18 +++++++------
+ edison-core/src/Data/Edison/Seq/Defaults.hs | 10 +++++---
+ edison-core/src/Data/Edison/Seq/FingerSeq.hs | 25 ++++++++++---------
+ edison-core/src/Data/Edison/Seq/JoinList.hs | 15 +++++------
+ edison-core/src/Data/Edison/Seq/MyersStack.hs | 18 +++++++------
+ edison-core/src/Data/Edison/Seq/RandList.hs | 18 +++++++------
+ edison-core/src/Data/Edison/Seq/RevSeq.hs | 15 +++++------
+ .../src/Data/Edison/Seq/SimpleQueue.hs | 15 +++++------
+ edison-core/src/Data/Edison/Seq/SizedSeq.hs | 15 +++++------
+ 33 files changed, 234 insertions(+), 177 deletions(-)
+
+diff --git a/edison-core/EdisonCore.cabal b/edison-core/EdisonCore.cabal
+index 901cd83..ad1af00 100644
+--- a/edison-core/EdisonCore.cabal
++++ b/edison-core/EdisonCore.cabal
+@@ -62,8 +62,10 @@ Library
+ array
+
+ if impl(ghc < 8.0)
+- -- Provide/emulate Data.Semigroups` API for pre-GHC-8
+- Build-Depends: semigroups == 0.18.*
++ Build-Depends:
++ fail,
++ -- Provide/emulate Data.Semigroups` API for pre-GHC-8
++ semigroups == 0.18.*
+
+ Default-Language: Haskell2010
+ Default-Extensions:
+diff --git a/edison-core/src/Data/Edison/Assoc/AssocList.hs b/edison-core/src/Data/Edison/Assoc/AssocList.hs
+index c577492..15d9884 100644
+--- a/edison-core/src/Data/Edison/Assoc/AssocList.hs
++++ b/edison-core/src/Data/Edison/Assoc/AssocList.hs
+@@ -58,8 +58,9 @@ import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
+ import qualified Prelude
+ import Data.Monoid
+ import Data.Semigroup as SG
+-import Control.Monad.Identity
++import qualified Control.Monad.Fail as Fail
+ import qualified Data.Edison.Assoc as A
++import Data.Edison.Prelude ( runFail_ )
+ import qualified Data.Edison.Seq as S
+ import qualified Data.Edison.Seq.BinaryRandList as RL
+ import Data.Edison.Assoc.Defaults
+@@ -82,10 +83,10 @@ size :: Eq k => FM k a -> Int
+ member :: Eq k => k -> FM k a -> Bool
+ count :: Eq k => k -> FM k a -> Int
+ lookup :: Eq k => k -> FM k a -> a
+-lookupM :: (Eq k, Monad rm) => k -> FM k a -> rm a
++lookupM :: (Eq k, Fail.MonadFail rm) => k -> FM k a -> rm a
+ lookupAll :: (Eq k,S.Sequence seq) => k -> FM k a -> seq a
+ lookupAndDelete :: Eq k => k -> FM k a -> (a,FM k a)
+-lookupAndDeleteM :: (Eq k,Monad rm) => k -> FM k a -> rm (a,FM k a)
++lookupAndDeleteM :: (Eq k, Fail.MonadFail rm) => k -> FM k a -> rm (a,FM k a)
+ lookupAndDeleteAll :: (Eq k,S.Sequence seq) => k -> FM k a -> (seq a,FM k a)
+ lookupWithDefault :: Eq k => a -> k -> FM k a -> a
+ adjust :: Eq k => (a -> a) -> k -> FM k a -> FM k a
+@@ -143,11 +144,11 @@ unionSeqWithKey :: (Eq k,S.Sequence seq) =>
+ (k -> a -> a -> a) -> seq (FM k a) -> FM k a
+ intersectionWithKey :: Eq k => (k -> a -> b -> c) -> FM k a -> FM k b -> FM k c
+
+-minView :: (Ord k,Monad m) => FM k a -> m (a,FM k a)
++minView :: (Ord k, Fail.MonadFail m) => FM k a -> m (a,FM k a)
+ minElem :: Ord k => FM k a -> a
+ deleteMin :: Ord k => FM k a -> FM k a
+ unsafeInsertMin :: Ord k => k -> a -> FM k a -> FM k a
+-maxView :: (Ord k,Monad m) => FM k a -> m (a,FM k a)
++maxView :: (Ord k, Fail.MonadFail m) => FM k a -> m (a,FM k a)
+ maxElem :: Ord k => FM k a -> a
+ deleteMax :: Ord k => FM k a -> FM k a
+ unsafeInsertMax :: Ord k => k -> a -> FM k a -> FM k a
+@@ -169,9 +170,9 @@ partitionLT_GE :: Ord k => k -> FM k a -> (FM k a,FM k a)
+ partitionLE_GT :: Ord k => k -> FM k a -> (FM k a,FM k a)
+ partitionLT_GT :: Ord k => k -> FM k a -> (FM k a,FM k a)
+
+-minViewWithKey :: (Ord k,Monad m) => FM k a -> m ((k, a), FM k a)
++minViewWithKey :: (Ord k, Fail.MonadFail m) => FM k a -> m ((k, a), FM k a)
+ minElemWithKey :: Ord k => FM k a -> (k,a)
+-maxViewWithKey :: (Ord k,Monad m) => FM k a -> m ((k, a), FM k a)
++maxViewWithKey :: (Ord k, Fail.MonadFail m) => FM k a -> m ((k, a), FM k a)
+ maxElemWithKey :: Ord k => FM k a -> (k,a)
+ foldrWithKey :: Ord k => (k -> a -> b -> b) -> b -> FM k a -> b
+ foldlWithKey :: Ord k => (b -> k -> a -> b) -> b -> FM k a -> b
+@@ -309,7 +310,7 @@ count _ E = 0
+ count key (I k _ m) | key == k = 1
+ | otherwise = count key m
+
+-lookup key m = runIdentity (lookupM key m)
++lookup key m = runFail_ (lookupM key m)
+
+ lookupM _ E = fail "AssocList.lookup: lookup failed"
+ lookupM key (I k x m) | key == k = return x
+@@ -319,7 +320,7 @@ lookupAll _ E = S.empty
+ lookupAll key (I k x m) | key == k = S.singleton x
+ | otherwise = lookupAll key m
+
+-lookupAndDelete key m = runIdentity (lookupAndDeleteM key m)
++lookupAndDelete key m = runFail_ (lookupAndDeleteM key m)
+
+ lookupAndDeleteM _ E = fail "AssocList.lookupAndDeleteM: lookup failed"
+ lookupAndDeleteM key (I k x m)
+diff --git a/edison-core/src/Data/Edison/Assoc/Defaults.hs b/edison-core/src/Data/Edison/Assoc/Defaults.hs
+index a9ef520..8e2b37d 100644
+--- a/edison-core/src/Data/Edison/Assoc/Defaults.hs
++++ b/edison-core/src/Data/Edison/Assoc/Defaults.hs
+@@ -15,6 +15,8 @@ module Data.Edison.Assoc.Defaults where
+
+ import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
+
++import qualified Control.Monad.Fail as Fail
++
+ import Data.Edison.Assoc
+ import qualified Data.Edison.Seq as S
+ import qualified Data.Edison.Seq.ListSeq as L
+@@ -190,7 +192,7 @@ lookupAndDeleteDefault k m =
+ Nothing -> error (instanceName m ++ ".lookupAndDelete: lookup failed")
+ Just x -> (x, delete k m)
+
+-lookupAndDeleteMDefault :: (Monad rm, AssocX m k) => k -> m a -> rm (a, m a)
++lookupAndDeleteMDefault :: (Fail.MonadFail rm, AssocX m k) => k -> m a -> rm (a, m a)
+ lookupAndDeleteMDefault k m =
+ case lookupM k m of
+ Nothing -> fail (instanceName m ++ ".lookupAndDelete: lookup failed")
+diff --git a/edison-core/src/Data/Edison/Assoc/PatriciaLoMap.hs b/edison-core/src/Data/Edison/Assoc/PatriciaLoMap.hs
+index 3073f83..43c2d85 100644
+--- a/edison-core/src/Data/Edison/Assoc/PatriciaLoMap.hs
++++ b/edison-core/src/Data/Edison/Assoc/PatriciaLoMap.hs
+@@ -55,10 +55,11 @@ module Data.Edison.Assoc.PatriciaLoMap (
+
+ import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
+ import qualified Prelude
+-import Control.Monad.Identity (runIdentity)
++import qualified Control.Monad.Fail as Fail
+ import Data.Monoid
+ import Data.Semigroup as SG
+ import qualified Data.Edison.Assoc as A
++import Data.Edison.Prelude ( runFail_ )
+ import qualified Data.Edison.Seq as S
+ import qualified Data.Edison.Seq.ListSeq as L
+ import Data.Edison.Assoc.Defaults
+@@ -210,9 +211,9 @@ member k (L j _) = (j == k)
+ member k (B _ m t0 t1) = if zeroBit k m then member k t0 else member k t1
+
+ lookup :: Int -> FM a -> a
+-lookup k m = runIdentity (lookupM k m)
++lookup k m = runFail_ (lookupM k m)
+
+-lookupM :: (Monad rm) => Int -> FM a -> rm a
++lookupM :: (Fail.MonadFail rm) => Int -> FM a -> rm a
+ lookupM _ E = fail "PatriciaLoMap.lookup: lookup failed"
+ lookupM k (L j x)
+ | j == k = return x
+@@ -233,7 +234,7 @@ lookupAndDelete = doLookupAndDelete
+ (error "PatriciaLoMap.lookupAndDelete: lookup failed")
+ (,)
+
+-lookupAndDeleteM :: Monad m => Int -> FM a -> m (a, FM a)
++lookupAndDeleteM :: Fail.MonadFail m => Int -> FM a -> m (a, FM a)
+ lookupAndDeleteM = doLookupAndDelete
+ (fail "PatriciaLoMap.lookupAndDelete: lookup failed")
+ (\x m -> return (x,m))
+@@ -583,25 +584,25 @@ ordListFM_rev (B _ _ t0 t1) = merge (ordListFM_rev t0) (ordListFM_rev t1)
+ GT -> x : merge xs (y:ys)
+ EQ -> error "PatriciaLoMap: bug in ordListFM_rev"
+
+-minView :: Monad m => FM a -> m (a, FM a)
++minView :: Fail.MonadFail m => FM a -> m (a, FM a)
+ minView fm =
+ case ordListFM fm of
+ [] -> fail $ moduleName++".minView: empty map"
+ ((k,x):_) -> return (x,delete k fm)
+
+-minViewWithKey :: Monad m => FM a -> m ((Int, a), FM a)
++minViewWithKey :: Fail.MonadFail m => FM a -> m ((Int, a), FM a)
+ minViewWithKey fm =
+ case ordListFM fm of
+ [] -> fail $ moduleName++".minViewWithKey: empty map"
+ ((k,x):_) -> return ((k,x),delete k fm)
+
+-maxView :: Monad m => FM a -> m (a, FM a)
++maxView :: Fail.MonadFail m => FM a -> m (a, FM a)
+ maxView fm =
+ case ordListFM_rev fm of
+ [] -> fail $ moduleName++".maxView: empty map"
+ ((k,x):_) -> return (x,delete k fm)
+
+-maxViewWithKey :: Monad m => FM a -> m ((Int, a), FM a)
++maxViewWithKey :: Fail.MonadFail m => FM a -> m ((Int, a), FM a)
+ maxViewWithKey fm =
+ case ordListFM_rev fm of
+ [] -> fail $ moduleName++".maxViewWithKey: empty map"
+diff --git a/edison-core/src/Data/Edison/Assoc/StandardMap.hs b/edison-core/src/Data/Edison/Assoc/StandardMap.hs
+index 5ca48c5..e7b6a0e 100644
+--- a/edison-core/src/Data/Edison/Assoc/StandardMap.hs
++++ b/edison-core/src/Data/Edison/Assoc/StandardMap.hs
+@@ -51,6 +51,7 @@ module Data.Edison.Assoc.StandardMap (
+
+ import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
+ import qualified Prelude
++import qualified Control.Monad.Fail as Fail
+ import qualified Data.Edison.Assoc as A
+ import qualified Data.Edison.Seq as S
+ import qualified Data.Edison.Seq.ListSeq as L
+@@ -81,10 +82,10 @@ member :: Ord k => k -> FM k a -> Bool
+ count :: Ord k => k -> FM k a -> Int
+ lookup :: Ord k => k -> FM k a -> a
+ lookupAll :: (Ord k,S.Sequence seq) => k -> FM k a -> seq a
+-lookupM :: (Ord k,Monad m) => k -> FM k a -> m a
++lookupM :: (Ord k, Fail.MonadFail m) => k -> FM k a -> m a
+ lookupWithDefault :: Ord k => a -> k -> FM k a -> a
+ lookupAndDelete :: Ord k => k -> FM k a -> (a, FM k a)
+-lookupAndDeleteM :: (Ord k,Monad m) => k -> FM k a -> m (a, FM k a)
++lookupAndDeleteM :: (Ord k, Fail.MonadFail m) => k -> FM k a -> m (a, FM k a)
+ lookupAndDeleteAll :: (Ord k,S.Sequence seq) => k -> FM k a -> (seq a,FM k a)
+ adjust :: Ord k => (a->a) -> k -> FM k a -> FM k a
+ adjustAll :: Ord k => (a->a) -> k -> FM k a -> FM k a
+@@ -103,11 +104,11 @@ filter :: Ord k => (a -> Bool) -> FM k a -> FM k a
+ partition :: Ord k => (a -> Bool) -> FM k a -> (FM k a,FM k a)
+ elements :: (Ord k,S.Sequence seq) => FM k a -> seq a
+
+-minView :: (Ord k,Monad m) => FM k a -> m (a, FM k a)
++minView :: (Ord k, Fail.MonadFail m) => FM k a -> m (a, FM k a)
+ minElem :: Ord k => FM k a -> a
+ deleteMin :: Ord k => FM k a -> FM k a
+ unsafeInsertMin :: Ord k => k -> a -> FM k a -> FM k a
+-maxView :: (Ord k,Monad m) => FM k a -> m (a, FM k a)
++maxView :: (Ord k, Fail.MonadFail m) => FM k a -> m (a, FM k a)
+ maxElem :: Ord k => FM k a -> a
+ deleteMax :: Ord k => FM k a -> FM k a
+ unsafeInsertMax :: Ord k => k -> a -> FM k a -> FM k a
+@@ -165,9 +166,9 @@ foldWithKey' :: Ord k => (k -> a -> b -> b) -> b -> FM k a -> b
+ filterWithKey :: Ord k => (k -> a -> Bool) -> FM k a -> FM k a
+ partitionWithKey :: Ord k => (k -> a -> Bool) -> FM k a -> (FM k a,FM k a)
+
+-minViewWithKey :: (Ord k,Monad m) => FM k a -> m ((k, a), FM k a)
++minViewWithKey :: (Ord k, Fail.MonadFail m) => FM k a -> m ((k, a), FM k a)
+ minElemWithKey :: Ord k => FM k a -> (k,a)
+-maxViewWithKey :: (Ord k,Monad m) => FM k a -> m ((k, a), FM k a)
++maxViewWithKey :: (Ord k, Fail.MonadFail m) => FM k a -> m ((k, a), FM k a)
+ maxElemWithKey :: Ord k => FM k a -> (k,a)
+ foldrWithKey :: (k -> a -> b -> b) -> b -> FM k a -> b
+ foldlWithKey :: (b -> k -> a -> b) -> b -> FM k a -> b
+diff --git a/edison-core/src/Data/Edison/Assoc/TernaryTrie.hs b/edison-core/src/Data/Edison/Assoc/TernaryTrie.hs
+index 8b2dd57..431b348 100644
+--- a/edison-core/src/Data/Edison/Assoc/TernaryTrie.hs
++++ b/edison-core/src/Data/Edison/Assoc/TernaryTrie.hs
+@@ -55,8 +55,10 @@ module Data.Edison.Assoc.TernaryTrie (
+ import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
+ import qualified Prelude
+ import qualified Data.Edison.Assoc as A
++import Data.Edison.Prelude ( runFail_ )
+ import qualified Data.Edison.Seq as S
+ import qualified Data.List as L
++import qualified Control.Monad.Fail as Fail
+ import Control.Monad.Identity
+ import Data.Monoid
+ import Data.Semigroup as SG
+@@ -83,10 +85,10 @@ size :: Ord k => FM k a -> Int
+ member :: Ord k => [k] -> FM k a -> Bool
+ count :: Ord k => [k] -> FM k a -> Int
+ lookup :: Ord k => [k] -> FM k a -> a
+-lookupM :: (Ord k, Monad rm) => [k] -> FM k a -> rm a
++lookupM :: (Ord k, Fail.MonadFail rm) => [k] -> FM k a -> rm a
+ lookupAll :: (Ord k,S.Sequence seq) => [k] -> FM k a -> seq a
+ lookupAndDelete :: Ord k => [k] -> FM k a -> (a, FM k a)
+-lookupAndDeleteM :: (Ord k, Monad rm) => [k] -> FM k a -> rm (a, FM k a)
++lookupAndDeleteM :: (Ord k, Fail.MonadFail rm) => [k] -> FM k a -> rm (a, FM k a)
+ lookupAndDeleteAll :: (Ord k, S.Sequence seq) => [k] -> FM k a -> (seq a,FM k a)
+ lookupWithDefault :: Ord k => a -> [k] -> FM k a -> a
+ adjust :: Ord k => (a -> a) -> [k] -> FM k a -> FM k a
+@@ -527,7 +529,7 @@ member = memberUsingLookupM
+
+ count = countUsingMember
+
+-lookup m k = runIdentity (lookupM m k)
++lookup m k = runFail_ (lookupM m k)
+
+ lookupM [] (FM Nothing _)
+ = fail "TernaryTrie.lookup: lookup failed"
+@@ -854,18 +856,18 @@ intersectionWithKey f
+
+ -- OrdAssocX
+
+-minViewFMB :: Monad m => FMB k a -> (FMB k a -> FM k a) -> m (a, FM k a)
++minViewFMB :: Fail.MonadFail m => FMB k a -> (FMB k a -> FM k a) -> m (a, FM k a)
+ minViewFMB E _ = fail $ moduleName++".minView: empty map"
+ minViewFMB (I i k (Just v) E m r) f = return (v, f (I i k Nothing E m r))
+ minViewFMB (I _ _ Nothing E (FMB' E) _) _ = error $ moduleName++".minView: bug!"
+ minViewFMB (I _ k Nothing E (FMB' m) r) f = minViewFMB m (\m' -> f (mkVBalancedFMB k Nothing E (FMB' m') r))
+ minViewFMB (I _ k mv l m r) f = minViewFMB l (\l' -> f (mkVBalancedFMB k mv l' m r))
+
+-minView :: Monad m => FM k a -> m (a,FM k a)
++minView :: Fail.MonadFail m => FM k a -> m (a,FM k a)
+ minView (FM (Just v) fmb) = return (v, FM Nothing fmb)
+ minView (FM Nothing fmb) = minViewFMB fmb (FM Nothing)
+
+-minViewWithKeyFMB :: Monad m => FMB k a -> ([k] -> [k]) -> (FMB k a -> FM k a) -> m (([k],a),FM k a)
++minViewWithKeyFMB :: Fail.MonadFail m => FMB k a -> ([k] -> [k]) -> (FMB k a -> FM k a) -> m (([k],a),FM k a)
+ minViewWithKeyFMB E _ _ = fail $ moduleName++".minView: empty map"
+ minViewWithKeyFMB (I i k (Just v) E m r) kf f = return ((kf [k],v),f (I i k Nothing E m r))
+ minViewWithKeyFMB (I _ _ Nothing E (FMB' E) _) _ _ = error $ moduleName++".minViewWithKey: bug!"
+@@ -874,7 +876,7 @@ minViewWithKeyFMB (I _ k Nothing E (FMB' m) r) kf f = minViewWithKeyFMB m (kf .
+ minViewWithKeyFMB (I _ k mv l m r) kf f = minViewWithKeyFMB l kf
+ (\l' -> f (mkVBalancedFMB k mv l' m r))
+
+-minViewWithKey :: Monad m => FM k a -> m (([k],a),FM k a)
++minViewWithKey :: Fail.MonadFail m => FM k a -> m (([k],a),FM k a)
+ minViewWithKey (FM (Just v) fmb) = return (([],v),FM Nothing fmb)
+ minViewWithKey (FM Nothing fmb) = minViewWithKeyFMB fmb id (FM Nothing)
+
+@@ -906,7 +908,7 @@ deleteMin = deleteMinUsingMinView
+ unsafeInsertMin :: Ord k => [k] -> a -> FM k a -> FM k a
+ unsafeInsertMin = insert
+
+-maxViewFMB :: Monad m => FMB k a -> (FMB k a -> FM k a) -> m (a, FM k a)
++maxViewFMB :: Fail.MonadFail m => FMB k a -> (FMB k a -> FM k a) -> m (a, FM k a)
+ maxViewFMB (I _ _ (Just v) l (FMB' E) E) f = return (v, f l)
+ --maxViewFMB (I i k (Just v) l (FMB' E) E) f = return (v, f (I i k Nothing l (FMB' E) E))
+ maxViewFMB (I _ _ Nothing _ (FMB' E) E) _ = error $ moduleName++".maxView: bug!"
+@@ -914,7 +916,7 @@ maxViewFMB (I i k mv l (FMB' m) E) f = maxViewFMB m (\m' -> f (I i k mv l
+ maxViewFMB (I _ k mv l m r) f = maxViewFMB r (\r' -> f (mkVBalancedFMB k mv l m r'))
+ maxViewFMB E _ = error $ moduleName++".maxView: bug!"
+
+-maxView :: Monad m => FM k a -> m (a, FM k a)
++maxView :: Fail.MonadFail m => FM k a -> m (a, FM k a)
+ maxView (FM Nothing E) = fail $ moduleName++".maxView: empty map"
+ maxView (FM (Just v) E) = return (v,FM Nothing E)
+ maxView (FM mv fmb) = maxViewFMB fmb (FM mv)
+@@ -930,7 +932,7 @@ maxViewWithKeyFMB (I _ k mv l m r) kf f = maxViewWithKeyFMB r kf
+ maxViewWithKeyFMB E _ _ = error $ moduleName++".maxViewWithKey: bug!"
+
+
+-maxViewWithKey :: Monad m => FM k a -> m (([k],a), FM k a)
++maxViewWithKey :: Fail.MonadFail m => FM k a -> m (([k],a), FM k a)
+ maxViewWithKey (FM Nothing E) = fail $ moduleName++".maxViewWithKey: empty map"
+ maxViewWithKey (FM (Just v) E) = return (([],v),FM Nothing E)
+ maxViewWithKey (FM mv fmb) = maxViewWithKeyFMB fmb id (FM mv)
+diff --git a/edison-core/src/Data/Edison/Coll/Defaults.hs b/edison-core/src/Data/Edison/Coll/Defaults.hs
+index 213ed36..d927f38 100644
+--- a/edison-core/src/Data/Edison/Coll/Defaults.hs
++++ b/edison-core/src/Data/Edison/Coll/Defaults.hs
+@@ -14,8 +14,9 @@
+ module Data.Edison.Coll.Defaults where
+
+ import Prelude hiding (null,foldr,foldl,foldr1,foldl1,lookup,filter)
+-import Control.Monad.Identity
++import qualified Control.Monad.Fail as Fail
+
++import Data.Edison.Prelude ( runFail_ )
+ import Data.Edison.Coll
+ import qualified Data.Edison.Seq as S
+ import qualified Data.Edison.Seq.ListSeq as L
+@@ -81,7 +82,7 @@ disjointUsingToOrdList xs ys = disj (toOrdList xs) (toOrdList ys)
+ disj _ _ = True
+
+ intersectWitnessUsingToOrdList ::
+- (OrdColl c a, Monad m) => c -> c -> m (a,a)
++ (OrdColl c a, Fail.MonadFail m) => c -> c -> m (a,a)
+ intersectWitnessUsingToOrdList as bs = witness (toOrdList as) (toOrdList bs)
+ where witness a@(x:xs) b@(y:ys) =
+ case compare x y of
+@@ -92,7 +93,7 @@ intersectWitnessUsingToOrdList as bs = witness (toOrdList as) (toOrdList bs)
+ witness _ _ = fail $ instanceName as ++ ".intersect: failed"
+
+ lookupUsingLookupM :: Coll c a => a -> c -> a
+-lookupUsingLookupM x ys = runIdentity (lookupM x ys)
++lookupUsingLookupM x ys = runFail_ (lookupM x ys)
+
+ lookupUsingLookupAll :: Coll c a => a -> c -> a
+ lookupUsingLookupAll x ys =
+@@ -100,7 +101,7 @@ lookupUsingLookupAll x ys =
+ (y:_) -> y
+ [] -> error $ instanceName ys ++ ".lookup: lookup failed"
+
+-lookupMUsingLookupAll :: (Coll c a, Monad m) => a -> c -> m a
++lookupMUsingLookupAll :: (Coll c a, Fail.MonadFail m) => a -> c -> m a
+ lookupMUsingLookupAll x ys =
+ case lookupAll x ys of
+ (y:_) -> return y
+diff --git a/edison-core/src/Data/Edison/Coll/EnumSet.hs b/edison-core/src/Data/Edison/Coll/EnumSet.hs
+index c93ab07..cce68e6 100644
+--- a/edison-core/src/Data/Edison/Coll/EnumSet.hs
++++ b/edison-core/src/Data/Edison/Coll/EnumSet.hs
+@@ -157,6 +157,7 @@ module Data.Edison.Coll.EnumSet (
+
+ import qualified Prelude
+ import Prelude hiding (filter,foldl,foldr,null,map,lookup,foldl1,foldr1)
++import qualified Control.Monad.Fail as Fail
+ import qualified Data.Bits as Bits
+ import Data.Bits hiding (complement)
+ import Data.Word
+@@ -251,7 +252,7 @@ count = countUsingMember
+ lookup :: (Eq a, Enum a) => a -> Set a -> a
+ lookup = lookupUsingLookupAll
+
+-lookupM :: (Eq a, Enum a, Monad m) => a -> Set a -> m a
++lookupM :: (Eq a, Enum a, Fail.MonadFail m) => a -> Set a -> m a
+ lookupM x s
+ | member x s = return x
+ | otherwise = fail (moduleName++".lookupM: lookup failed")
+@@ -340,12 +341,12 @@ deleteMax (Set w)
+ | w == 0 = empty
+ | otherwise = Set $ clearBit w $ msb w
+
+-minView :: (Enum a, Monad m) => Set a -> m (a, Set a)
++minView :: (Enum a, Fail.MonadFail m) => Set a -> m (a, Set a)
+ minView (Set w)
+ | w == 0 = fail (moduleName++".minView: empty set")
+ | otherwise = let i = lsb w in return (toEnum i,Set $ clearBit w i)
+
+-maxView :: (Enum a, Monad m) => Set a -> m (a, Set a)
++maxView :: (Enum a, Fail.MonadFail m) => Set a -> m (a, Set a)
+ maxView (Set w)
+ | w == 0 = fail (moduleName++".maxView: empty set")
+ | otherwise = let i = msb w in return (toEnum i, Set $ clearBit w i)
+diff --git a/edison-core/src/Data/Edison/Coll/LazyPairingHeap.hs b/edison-core/src/Data/Edison/Coll/LazyPairingHeap.hs
+index e41ce2e..3dcebe4 100644
+--- a/edison-core/src/Data/Edison/Coll/LazyPairingHeap.hs
++++ b/edison-core/src/Data/Edison/Coll/LazyPairingHeap.hs
+@@ -49,6 +49,7 @@ import Data.List (sort)
+ import Data.Monoid
+ import Data.Semigroup as SG
+ import Control.Monad
++import qualified Control.Monad.Fail as Fail
+ import Test.QuickCheck
+
+ moduleName :: String
+@@ -359,7 +360,7 @@ lookupAll y h = look h S.empty
+ EQ -> S.lcons x $ look i $ look xs rest
+ GT -> rest
+
+-minView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
++minView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
+ minView E = fail "LazyPairingHeap.minView: empty heap"
+ minView (H1 x xs) = return (x,xs)
+ minView (H2 x h xs) = return (x,union h xs)
+@@ -369,7 +370,7 @@ minElem E = error "LazyPairingHeap.minElem: empty heap"
+ minElem (H1 x _) = x
+ minElem (H2 x _ _) = x
+
+-maxView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
++maxView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
+ maxView E = fail "LazyPairingHeap.maxView: empty heap"
+ maxView xs = return (y,xs')
+ where (xs', y) = maxView' xs
+@@ -474,7 +475,7 @@ deleteMax = deleteMaxUsingMaxView
+ lookup :: Ord a => a -> Heap a -> a
+ lookup = lookupUsingLookupAll
+
+-lookupM :: (Ord a, Monad m) => a -> Heap a -> m a
++lookupM :: (Ord a, Fail.MonadFail m) => a -> Heap a -> m a
+ lookupM = lookupMUsingLookupAll
+
+ lookupWithDefault :: Ord a => a -> a -> Heap a -> a
+diff --git a/edison-core/src/Data/Edison/Coll/LeftistHeap.hs b/edison-core/src/Data/Edison/Coll/LeftistHeap.hs
+index 751394b..10ccf5a 100644
+--- a/edison-core/src/Data/Edison/Coll/LeftistHeap.hs
++++ b/edison-core/src/Data/Edison/Coll/LeftistHeap.hs
+@@ -47,6 +47,7 @@ import Data.Edison.Coll.Defaults
+ import Data.Monoid
+ import Data.Semigroup as SG
+ import Control.Monad
++import qualified Control.Monad.Fail as Fail
+ import Test.QuickCheck
+
+ moduleName :: String
+@@ -173,7 +174,7 @@ toSeq h = tol h S.empty
+ where tol E rest = rest
+ tol (L _ x a b) rest = S.lcons x (tol b (tol a rest))
+
+-lookupM :: (Ord a, Monad m) => a -> Heap a -> m a
++lookupM :: (Ord a, Fail.MonadFail m) => a -> Heap a -> m a
+ lookupM _ E = fail "LeftistHeap.lookupM: XXX"
+ lookupM x (L _ y a b) =
+ case compare x y of
+@@ -299,7 +300,7 @@ partitionLT_GT y h = (h', C.unionList hs)
+ (b', hs'') = collect b hs'
+ in (node x a' b', hs'')
+
+-minView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
++minView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
+ minView E = fail "LeftistHeap.minView: empty collection"
+ minView (L _ x a b) = return (x, union a b)
+
+@@ -307,7 +308,7 @@ minElem :: Ord a => Heap a -> a
+ minElem E = error "LeftistHeap.minElem: empty collection"
+ minElem (L _ x _ _) = x
+
+-maxView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
++maxView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
+ maxView E = fail "LeftistHeap.maxView: empty collection"
+ maxView (L _ x E _) = return (x, E)
+ maxView (L _ x a E) = return (y, L 1 x a' E)
+diff --git a/edison-core/src/Data/Edison/Coll/MinHeap.hs b/edison-core/src/Data/Edison/Coll/MinHeap.hs
+index ba38960..94e2f1b 100644
+--- a/edison-core/src/Data/Edison/Coll/MinHeap.hs
++++ b/edison-core/src/Data/Edison/Coll/MinHeap.hs
+@@ -46,6 +46,7 @@ import Data.Edison.Seq.Defaults (tokenMatch,maybeParens)
+ import Data.Monoid
+ import qualified Data.Semigroup as SG
+ import Control.Monad
++import qualified Control.Monad.Fail as Fail
+ import Test.QuickCheck
+
+ data Min h a = E | M a h deriving (Eq)
+@@ -75,7 +76,7 @@ strict :: (C.CollX h a,Ord a) => Min h a -> Min h a
+
+ toSeq :: (C.Coll h a,S.Sequence s) => Min h a -> s a
+ lookup :: (C.Coll h a,Ord a) => a -> Min h a -> a
+-lookupM :: (C.Coll h a,Ord a,Monad m) => a -> Min h a -> m a
++lookupM :: (C.Coll h a, Ord a, Fail.MonadFail m) => a -> Min h a -> m a
+ lookupAll :: (C.Coll h a,Ord a,S.Sequence s) => a -> Min h a -> s a
+ lookupWithDefault :: (C.Coll h a,Ord a) => a -> a -> Min h a -> a
+ fold :: (C.Coll h a) => (a -> b -> b) -> b -> Min h a -> b
+@@ -100,9 +101,9 @@ partitionLT_GE :: (C.OrdColl h a,Ord a) => a -> Min h a -> (Min h a, Min h a)
+ partitionLE_GT :: (C.OrdColl h a,Ord a) => a -> Min h a -> (Min h a, Min h a)
+ partitionLT_GT :: (C.OrdColl h a,Ord a) => a -> Min h a -> (Min h a, Min h a)
+
+-minView :: (C.OrdColl h a,Ord a,Monad m) => Min h a -> m (a, Min h a)
++minView :: (C.OrdColl h a, Ord a, Fail.MonadFail m) => Min h a -> m (a, Min h a)
+ minElem :: (C.OrdColl h a,Ord a) => Min h a -> a
+-maxView :: (C.OrdColl h a,Ord a,Monad m) => Min h a -> m (a, Min h a)
++maxView :: (C.OrdColl h a, Ord a, Fail.MonadFail m) => Min h a -> m (a, Min h a)
+ maxElem :: (C.OrdColl h a,Ord a) => Min h a -> a
+ foldr :: (C.OrdColl h a,Ord a) => (a -> b -> b) -> b -> Min h a -> b
+ foldl :: (C.OrdColl h a,Ord a) => (b -> a -> b) -> b -> Min h a -> b
+diff --git a/edison-core/src/Data/Edison/Coll/SkewHeap.hs b/edison-core/src/Data/Edison/Coll/SkewHeap.hs
+index 1a05ebe..e55ba58 100644
+--- a/edison-core/src/Data/Edison/Coll/SkewHeap.hs
++++ b/edison-core/src/Data/Edison/Coll/SkewHeap.hs
+@@ -47,6 +47,7 @@ import Data.Edison.Coll.Defaults
+ import Data.Monoid
+ import Data.Semigroup as SG
+ import Control.Monad
++import qualified Control.Monad.Fail as Fail
+
+ import Test.QuickCheck
+
+@@ -142,7 +143,7 @@ toSeq h = tol h S.empty
+ where tol E rest = rest
+ tol (T x a b) rest = S.lcons x (tol b (tol a rest))
+
+-lookupM :: (Ord a, Monad m) => a -> Heap a -> m a
++lookupM :: (Ord a, Fail.MonadFail m) => a -> Heap a -> m a
+ lookupM _ E = fail "SkewHeap.lookupM: XXX"
+ lookupM x (T y a b) =
+ case compare x y of
+@@ -267,7 +268,7 @@ partitionLT_GT y h = (h', C.unionList hs)
+ (b', hs'') = collect b hs'
+ in (T x a' b', hs'')
+
+-minView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
++minView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
+ minView E = fail "SkewHeap.minView: empty heap"
+ minView (T x a b) = return (x, union a b)
+
+@@ -275,7 +276,7 @@ minElem :: Ord a => Heap a -> a
+ minElem E = error "SkewHeap.minElem: empty collection"
+ minElem (T x _ _) = x
+
+-maxView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
++maxView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
+ maxView E = fail "SkewHeap.maxView: empty heap"
+ maxView (T x E E) = return (x, E)
+ maxView (T x a E) = return (y, T x a' E)
+diff --git a/edison-core/src/Data/Edison/Coll/SplayHeap.hs b/edison-core/src/Data/Edison/Coll/SplayHeap.hs
+index 4e3b061..6c950b7 100644
+--- a/edison-core/src/Data/Edison/Coll/SplayHeap.hs
++++ b/edison-core/src/Data/Edison/Coll/SplayHeap.hs
+@@ -50,6 +50,7 @@ import Data.Edison.Coll.Defaults
+ import Data.Monoid
+ import Data.Semigroup as SG
+ import Control.Monad
++import qualified Control.Monad.Fail as Fail
+ import Test.QuickCheck
+
+ moduleName :: String
+@@ -93,7 +94,7 @@ strict :: Heap a -> Heap a
+
+ toSeq :: (Ord a, S.Sequence s) => Heap a -> s a
+ lookup :: Ord a => a -> Heap a -> a
+-lookupM :: (Ord a,Monad m) => a -> Heap a -> m a
++lookupM :: (Ord a, Fail.MonadFail m) => a -> Heap a -> m a
+ lookupAll :: (Ord a,S.Sequence s) => a -> Heap a -> s a
+ lookupWithDefault :: Ord a => a -> a -> Heap a -> a
+ fold :: Ord a => (a -> b -> b) -> b -> Heap a -> b
+@@ -118,9 +119,9 @@ partitionLT_GE :: Ord a => a -> Heap a -> (Heap a, Heap a)
+ partitionLE_GT :: Ord a => a -> Heap a -> (Heap a, Heap a)
+ partitionLT_GT :: Ord a => a -> Heap a -> (Heap a, Heap a)
+
+-minView :: (Ord a,Monad m) => Heap a -> m (a, Heap a)
++minView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
+ minElem :: Ord a => Heap a -> a
+-maxView :: (Ord a,Monad m) => Heap a -> m (a, Heap a)
++maxView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
+ maxElem :: Ord a => Heap a -> a
+ foldr :: Ord a => (a -> b -> b) -> b -> Heap a -> b
+ foldl :: Ord a => (b -> a -> b) -> b -> Heap a -> b
+diff --git a/edison-core/src/Data/Edison/Coll/StandardSet.hs b/edison-core/src/Data/Edison/Coll/StandardSet.hs
+index fcaf715..56df4bf 100644
+--- a/edison-core/src/Data/Edison/Coll/StandardSet.hs
++++ b/edison-core/src/Data/Edison/Coll/StandardSet.hs
+@@ -43,6 +43,7 @@ module Data.Edison.Coll.StandardSet (
+
+ import Prelude hiding (null,foldr,foldl,foldr1,foldl1,lookup,filter)
+ import qualified Prelude
++import qualified Control.Monad.Fail as Fail
+ import qualified Data.List
+
+ import qualified Data.Edison.Coll as C
+@@ -73,7 +74,7 @@ strict :: Ord a => Set a -> Set a
+
+ toSeq :: (Ord a,S.Sequence seq) => Set a -> seq a
+ lookup :: Ord a => a -> Set a -> a
+-lookupM :: (Ord a,Monad m) => a -> Set a -> m a
++lookupM :: (Ord a, Monad m, Fail.MonadFail m) => a -> Set a -> m a
+ lookupAll :: (Ord a,S.Sequence seq) => a -> Set a -> seq a
+ lookupWithDefault :: Ord a => a -> a -> Set a -> a
+ fold :: (a -> b -> b) -> b -> Set a -> b
+@@ -98,9 +99,9 @@ partitionLT_GE :: Ord a => a -> Set a -> (Set a, Set a)
+ partitionLE_GT :: Ord a => a -> Set a -> (Set a, Set a)
+ partitionLT_GT :: Ord a => a -> Set a -> (Set a, Set a)
+
+-minView :: (Ord a,Monad m) => Set a -> m (a, Set a)
++minView :: (Ord a, Monad m, Fail.MonadFail m) => Set a -> m (a, Set a)
+ minElem :: Set a -> a
+-maxView :: (Ord a,Monad m) => Set a -> m (a, Set a)
++maxView :: (Ord a, Monad m, Fail.MonadFail m) => Set a -> m (a, Set a)
+ maxElem :: Set a -> a
+ foldr :: (a -> b -> b) -> b -> Set a -> b
+ foldl :: (b -> a -> b) -> b -> Set a -> b
+diff --git a/edison-core/src/Data/Edison/Coll/UnbalancedSet.hs b/edison-core/src/Data/Edison/Coll/UnbalancedSet.hs
+index 03cb856..d7975d0 100644
+--- a/edison-core/src/Data/Edison/Coll/UnbalancedSet.hs
++++ b/edison-core/src/Data/Edison/Coll/UnbalancedSet.hs
+@@ -43,6 +43,7 @@ module Data.Edison.Coll.UnbalancedSet (
+
+ import Prelude hiding (null,foldr,foldl,foldr1,foldl1,lookup,filter)
+ import qualified Prelude
++import qualified Control.Monad.Fail as Fail
+ import qualified Data.Edison.Coll as C
+ import qualified Data.Edison.Seq as S
+ import Data.Edison.Coll.Defaults
+@@ -70,7 +71,7 @@ strict :: Set a -> Set a
+
+ toSeq :: (Ord a,S.Sequence seq) => Set a -> seq a
+ lookup :: Ord a => a -> Set a -> a
+-lookupM :: (Ord a,Monad m) => a -> Set a -> m a
++lookupM :: (Ord a, Fail.MonadFail m) => a -> Set a -> m a
+ lookupAll :: (Ord a,S.Sequence seq) => a -> Set a -> seq a
+ lookupWithDefault :: Ord a => a -> a -> Set a -> a
+ fold :: (a -> b -> b) -> b -> Set a -> b
+@@ -95,9 +96,9 @@ partitionLT_GE :: Ord a => a -> Set a -> (Set a, Set a)
+ partitionLE_GT :: Ord a => a -> Set a -> (Set a, Set a)
+ partitionLT_GT :: Ord a => a -> Set a -> (Set a, Set a)
+
+-minView :: (Monad m) => Set a -> m (a, Set a)
++minView :: (Fail.MonadFail m) => Set a -> m (a, Set a)
+ minElem :: Set a -> a
+-maxView :: (Monad m) => Set a -> m (a, Set a)
++maxView :: (Fail.MonadFail m) => Set a -> m (a, Set a)
+ maxElem :: Set a -> a
+ foldr :: (a -> b -> b) -> b -> Set a -> b
+ foldl :: (b -> a -> b) -> b -> Set a -> b
+diff --git a/edison-core/src/Data/Edison/Concrete/FingerTree.hs b/edison-core/src/Data/Edison/Concrete/FingerTree.hs
+index 47f766c..c6a2ac0 100644
+--- a/edison-core/src/Data/Edison/Concrete/FingerTree.hs
++++ b/edison-core/src/Data/Edison/Concrete/FingerTree.hs
+@@ -81,6 +81,7 @@ import Test.QuickCheck
+ import Data.Edison.Prelude
+
+ import Control.Monad (liftM2, liftM3, liftM4)
++import qualified Control.Monad.Fail as Fail
+
+
+ infixr 5 `lcons`
+@@ -334,7 +335,7 @@ null Empty = True
+ null _ = False
+
+ -- | /O(1)/. Analyse the left end of a sequence.
+-lview :: (Measured v a, Monad m) => FingerTree v a -> m (a,FingerTree v a)
++lview :: (Measured v a, Fail.MonadFail m) => FingerTree v a -> m (a,FingerTree v a)
+ lview Empty = fail "FingerTree.lview: empty tree"
+ lview (Single x) = return (x, Empty)
+ lview (Deep _ (One x) m sf) = return . (,) x $
+@@ -357,7 +358,7 @@ ltailDigit (Four _ b c d) = Three b c d
+ ltailDigit _ = error "FingerTree.ltailDigit: bug!"
+
+ -- | /O(1)/. Analyse the right end of a sequence.
+-rview :: (Measured v a, Monad m) => FingerTree v a -> m (a, FingerTree v a)
++rview :: (Measured v a, Fail.MonadFail m) => FingerTree v a -> m (a, FingerTree v a)
+ rview Empty = fail "FingerTree.rview: empty tree"
+ rview (Single x) = return (x, Empty)
+ rview (Deep _ pr m (One x)) = return . (,) x $
+diff --git a/edison-core/src/Data/Edison/Seq/BankersQueue.hs b/edison-core/src/Data/Edison/Seq/BankersQueue.hs
+index 6dac746..0ab24c9 100644
+--- a/edison-core/src/Data/Edison/Seq/BankersQueue.hs
++++ b/edison-core/src/Data/Edison/Seq/BankersQueue.hs
+@@ -51,11 +51,13 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
+
+ import qualified Control.Applicative as App
+
++import Data.Edison.Prelude ( runFail_ )
+ import qualified Data.Edison.Seq as S ( Sequence(..) )
+ import Data.Edison.Seq.Defaults
+ import qualified Data.Edison.Seq.ListSeq as L
+ import Data.Monoid
+ import Data.Semigroup as SG
++import qualified Control.Monad.Fail as Fail
+ import Control.Monad.Identity
+ import Test.QuickCheck
+
+@@ -66,16 +68,16 @@ singleton :: a -> Seq a
+ lcons :: a -> Seq a -> Seq a
+ rcons :: a -> Seq a -> Seq a
+ append :: Seq a -> Seq a -> Seq a
+-lview :: (Monad m) => Seq a -> m (a, Seq a)
++lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ lhead :: Seq a -> a
+-lheadM :: (Monad m) => Seq a -> m a
++lheadM :: (Fail.MonadFail m) => Seq a -> m a
+ ltail :: Seq a -> Seq a
+-ltailM :: (Monad m) => Seq a -> m (Seq a)
+-rview :: (Monad m) => Seq a -> m (a, Seq a)
++ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
++rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ rhead :: Seq a -> a
+-rheadM :: (Monad m) => Seq a -> m a
++rheadM :: (Fail.MonadFail m) => Seq a -> m a
+ rtail :: Seq a -> Seq a
+-rtailM :: (Monad m) => Seq a -> m (Seq a)
++rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
+ null :: Seq a -> Bool
+ size :: Seq a -> Int
+ concat :: Seq (Seq a) -> Seq a
+@@ -106,7 +108,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
+ copy :: Int -> a -> Seq a
+ inBounds :: Int -> Seq a -> Bool
+ lookup :: Int -> Seq a -> a
+-lookupM :: (Monad m) => Int -> Seq a -> m a
++lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
+ lookupWithDefault :: a -> Int -> Seq a -> a
+ update :: Int -> a -> Seq a -> Seq a
+ adjust :: (a -> a) -> Int -> Seq a -> Seq a
+@@ -263,7 +265,7 @@ copy n x
+
+ -- reduce1: given sizes could do more effective job of dividing evenly!
+
+-lookup idx q = runIdentity (lookupM idx q)
++lookup idx q = runFail_ (lookupM idx q)
+
+ lookupM idx (Q i xs ys j)
+ | idx < i = L.lookupM idx xs
+diff --git a/edison-core/src/Data/Edison/Seq/BinaryRandList.hs b/edison-core/src/Data/Edison/Seq/BinaryRandList.hs
+index b01b9b8..e772b65 100644
+--- a/edison-core/src/Data/Edison/Seq/BinaryRandList.hs
++++ b/edison-core/src/Data/Edison/Seq/BinaryRandList.hs
+@@ -55,14 +55,15 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
+ zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
+
+ import qualified Control.Applicative as App
+-import Control.Monad.Identity
+ import Data.Maybe
+
++import Data.Edison.Prelude ( runFail_ )
+ import qualified Data.Edison.Seq as S ( Sequence(..) )
+ import Data.Edison.Seq.Defaults
+ import Data.Monoid
+ import Data.Semigroup as SG
+ import Control.Monad
++import qualified Control.Monad.Fail as Fail
+ import Test.QuickCheck
+
+ -- signatures for exported functions
+@@ -72,16 +73,16 @@ singleton :: a -> Seq a
+ lcons :: a -> Seq a -> Seq a
+ rcons :: a -> Seq a -> Seq a
+ append :: Seq a -> Seq a -> Seq a
+-lview :: (Monad m) => Seq a -> m (a, Seq a)
++lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ lhead :: Seq a -> a
+-lheadM :: (Monad m) => Seq a -> m a
++lheadM :: (Fail.MonadFail m) => Seq a -> m a
+ ltail :: Seq a -> Seq a
+-ltailM :: (Monad m) => Seq a -> m (Seq a)
+-rview :: (Monad m) => Seq a -> m (a, Seq a)
++ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
++rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ rhead :: Seq a -> a
+-rheadM :: (Monad m) => Seq a -> m a
++rheadM :: (Fail.MonadFail m) => Seq a -> m a
+ rtail :: Seq a -> Seq a
+-rtailM :: (Monad m) => Seq a -> m (Seq a)
++rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
+ null :: Seq a -> Bool
+ size :: Seq a -> Int
+ concat :: Seq (Seq a) -> Seq a
+@@ -112,7 +113,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
+ copy :: Int -> a -> Seq a
+ inBounds :: Int -> Seq a -> Bool
+ lookup :: Int -> Seq a -> a
+-lookupM :: (Monad m) => Int -> Seq a -> m a
++lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
+ lookupWithDefault :: a -> Int -> Seq a -> a
+ update :: Int -> a -> Seq a -> Seq a
+ adjust :: (a -> a) -> Int -> Seq a -> Seq a
+@@ -267,7 +268,7 @@ inBounds i xs = (i >= 0) && inb xs i
+ inb (Even ps) i = inb ps (half i)
+ inb (Odd _ ps) i = (i == 0) || inb ps (half (i-1))
+
+-lookup i xs = runIdentity (lookupM i xs)
++lookup i xs = runFail_ (lookupM i xs)
+
+ lookupM i xs
+ | i < 0 = fail "BinaryRandList.lookup: bad subscript"
+diff --git a/edison-core/src/Data/Edison/Seq/BraunSeq.hs b/edison-core/src/Data/Edison/Seq/BraunSeq.hs
+index 7f6f33b..11236e3 100644
+--- a/edison-core/src/Data/Edison/Seq/BraunSeq.hs
++++ b/edison-core/src/Data/Edison/Seq/BraunSeq.hs
+@@ -72,6 +72,7 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
+ zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
+
+ import qualified Control.Applicative as App
++import qualified Control.Monad.Fail as Fail
+ import Control.Monad.Identity
+ import Data.Maybe
+ import Data.Monoid
+@@ -79,6 +80,7 @@ import Data.Semigroup as SG
+ import Test.QuickCheck
+
+
++import Data.Edison.Prelude ( runFail_ )
+ import qualified Data.Edison.Seq as S ( Sequence(..) )
+ import Data.Edison.Seq.Defaults
+ import qualified Data.Edison.Seq.ListSeq as L
+@@ -91,16 +93,16 @@ singleton :: a -> Seq a
+ lcons :: a -> Seq a -> Seq a
+ rcons :: a -> Seq a -> Seq a
+ append :: Seq a -> Seq a -> Seq a
+-lview :: (Monad m) => Seq a -> m (a, Seq a)
++lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ lhead :: Seq a -> a
+-lheadM :: (Monad m) => Seq a -> m a
++lheadM :: (Fail.MonadFail m) => Seq a -> m a
+ ltail :: Seq a -> Seq a
+-ltailM :: (Monad m) => Seq a -> m (Seq a)
+-rview :: (Monad m) => Seq a -> m (a, Seq a)
++ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
++rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ rhead :: Seq a -> a
+-rheadM :: (Monad m) => Seq a -> m a
++rheadM :: (Fail.MonadFail m) => Seq a -> m a
+ rtail :: Seq a -> Seq a
+-rtailM :: (Monad m) => Seq a -> m (Seq a)
++rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
+ null :: Seq a -> Bool
+ size :: Seq a -> Int
+ concat :: Seq (Seq a) -> Seq a
+@@ -131,7 +133,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
+ copy :: Int -> a -> Seq a
+ inBounds :: Int -> Seq a -> Bool
+ lookup :: Int -> Seq a -> a
+-lookupM :: (Monad m) => Int -> Seq a -> m a
++lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
+ lookupWithDefault :: a -> Int -> Seq a -> a
+ update :: Int -> a -> Seq a -> Seq a
+ adjust :: (a -> a) -> Int -> Seq a -> Seq a
+@@ -344,7 +346,7 @@ inBounds i xs = (i >= 0) && inb xs i
+ | i == 0 = True
+ | otherwise = inb b (half i - 1)
+
+-lookup i xs = runIdentity (lookupM i xs)
++lookup i xs = runFail_ (lookupM i xs)
+
+ lookupM i xs
+ | i < 0 = fail "BraunSeq.lookupM: bad subscript"
+diff --git a/edison-core/src/Data/Edison/Seq/Defaults.hs b/edison-core/src/Data/Edison/Seq/Defaults.hs
+index ed593dc..eae6a09 100644
+--- a/edison-core/src/Data/Edison/Seq/Defaults.hs
++++ b/edison-core/src/Data/Edison/Seq/Defaults.hs
+@@ -17,9 +17,11 @@ 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.Fail as Fail
+ import Control.Monad.Identity
+ import Data.Char (isSpace)
+
++import Data.Edison.Prelude ( runFail_ )
+ import Data.Edison.Seq
+ import qualified Data.Edison.Seq.ListSeq as L
+
+@@ -33,7 +35,7 @@ appendUsingFoldr :: Sequence s => s a -> s a -> s a
+ appendUsingFoldr s t | null t = s
+ | otherwise = foldr lcons t s
+
+-rviewDefault :: (Monad m, Sequence s) => s a -> m (a, s a)
++rviewDefault :: (Fail.MonadFail m, Sequence s) => s a -> m (a, s a)
+ rviewDefault xs
+ | null xs = fail $ instanceName xs ++ ".rview: empty sequence"
+ | otherwise = return (rhead xs, rtail xs)
+@@ -49,7 +51,7 @@ rtailUsingLview xs =
+ Nothing -> empty
+ Just (y, ys) -> lcons x (rt y ys)
+
+-rtailMUsingLview :: (Monad m,Sequence s) => s a -> m (s a)
++rtailMUsingLview :: (Fail.MonadFail m, Sequence s) => s a -> m (s a)
+ rtailMUsingLview xs =
+ case lview xs of
+ Nothing -> fail $ instanceName xs ++ ".rtailM: empty sequence"
+@@ -200,7 +202,7 @@ inBoundsUsingSize :: Sequence s => Int -> s a -> Bool
+ inBoundsUsingSize i s = i >= 0 && i < size s
+
+ lookupUsingLookupM :: Sequence s => Int -> s a -> a
+-lookupUsingLookupM i s = runIdentity (lookupM i s)
++lookupUsingLookupM i s = runFail_ (lookupM i s)
+
+ lookupUsingDrop :: Sequence s => Int -> s a -> a
+ lookupUsingDrop i s
+@@ -220,7 +222,7 @@ lookupWithDefaultUsingDrop d i s
+ | otherwise = lhead s'
+ where s' = drop i s
+
+-lookupMUsingDrop :: (Monad m, Sequence s) => Int -> s a -> m a
++lookupMUsingDrop :: (Fail.MonadFail m, Sequence s) => Int -> s a -> m a
+ lookupMUsingDrop i s
+ -- XXX better error message!
+ | i < 0 || null s' = fail $ instanceName s
+diff --git a/edison-core/src/Data/Edison/Seq/FingerSeq.hs b/edison-core/src/Data/Edison/Seq/FingerSeq.hs
+index c74c70b..a34254c 100644
+--- a/edison-core/src/Data/Edison/Seq/FingerSeq.hs
++++ b/edison-core/src/Data/Edison/Seq/FingerSeq.hs
+@@ -37,9 +37,10 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
+ zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
+
+ import qualified Control.Applicative as App
+-import Data.Edison.Prelude (measure, Measured())
++import Data.Edison.Prelude (measure, Measured(), runFail_)
+ import qualified Data.Edison.Seq as S
+ import Data.Edison.Seq.Defaults
++import qualified Control.Monad.Fail as Fail
+ import Control.Monad.Identity
+ import Data.Monoid
+ import Data.Semigroup as SG
+@@ -87,16 +88,16 @@ singleton :: a -> Seq a
+ lcons :: a -> Seq a -> Seq a
+ rcons :: a -> Seq a -> Seq a
+ append :: Seq a -> Seq a -> Seq a
+-lview :: (Monad m) => Seq a -> m (a, Seq a)
++lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ lhead :: Seq a -> a
+-lheadM :: (Monad m) => Seq a -> m a
++lheadM :: (Fail.MonadFail m) => Seq a -> m a
+ ltail :: Seq a -> Seq a
+-ltailM :: (Monad m) => Seq a -> m (Seq a)
+-rview :: (Monad m) => Seq a -> m (a, Seq a)
++ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
++rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ rhead :: Seq a -> a
+-rheadM :: (Monad m) => Seq a -> m a
++rheadM :: (Fail.MonadFail m) => Seq a -> m a
+ rtail :: Seq a -> Seq a
+-rtailM :: (Monad m) => Seq a -> m (Seq a)
++rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
+ null :: Seq a -> Bool
+ size :: Seq a -> Int
+ concat :: Seq (Seq a) -> Seq a
+@@ -127,7 +128,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
+ copy :: Int -> a -> Seq a
+ inBounds :: Int -> Seq a -> Bool
+ lookup :: Int -> Seq a -> a
+-lookupM :: (Monad m) => Int -> Seq a -> m a
++lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
+ lookupWithDefault :: a -> Int -> Seq a -> a
+ update :: Int -> a -> Seq a -> Seq a
+ adjust :: (a -> a) -> Int -> Seq a -> Seq a
+@@ -206,10 +207,10 @@ lheadM xs = lview xs >>= return . fst
+ ltailM xs = lview xs >>= return . snd
+ rheadM xs = rview xs >>= return . fst
+ rtailM xs = rview xs >>= return . snd
+-lhead = runIdentity . lheadM
+-ltail = runIdentity . ltailM
+-rhead = runIdentity . rheadM
+-rtail = runIdentity . rtailM
++lhead = runFail_ . lheadM
++ltail = runFail_ . ltailM
++rhead = runFail_ . rheadM
++rtail = runFail_ . rtailM
+
+ fold = foldr
+ fold' = foldr'
+diff --git a/edison-core/src/Data/Edison/Seq/JoinList.hs b/edison-core/src/Data/Edison/Seq/JoinList.hs
+index 6922023..05855ba 100644
+--- a/edison-core/src/Data/Edison/Seq/JoinList.hs
++++ b/edison-core/src/Data/Edison/Seq/JoinList.hs
+@@ -57,6 +57,7 @@ import qualified Control.Applicative as App
+
+ import Data.Edison.Seq.Defaults
+ import Control.Monad
++import qualified Control.Monad.Fail as Fail
+ import Data.Monoid
+ import Data.Semigroup as SG
+ import Test.QuickCheck
+@@ -68,16 +69,16 @@ singleton :: a -> Seq a
+ lcons :: a -> Seq a -> Seq a
+ rcons :: a -> Seq a -> Seq a
+ append :: Seq a -> Seq a -> Seq a
+-lview :: (Monad m) => Seq a -> m (a, Seq a)
++lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ lhead :: Seq a -> a
+-lheadM :: (Monad m) => Seq a -> m a
++lheadM :: (Fail.MonadFail m) => Seq a -> m a
+ ltail :: Seq a -> Seq a
+-ltailM :: (Monad m) => Seq a -> m (Seq a)
+-rview :: (Monad m) => Seq a -> m (a, Seq a)
++ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
++rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ rhead :: Seq a -> a
+-rheadM :: (Monad m) => Seq a -> m a
++rheadM :: (Fail.MonadFail m) => Seq a -> m a
+ rtail :: Seq a -> Seq a
+-rtailM :: (Monad m) => Seq a -> m (Seq a)
++rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
+ null :: Seq a -> Bool
+ size :: Seq a -> Int
+ concat :: Seq (Seq a) -> Seq a
+@@ -108,7 +109,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
+ copy :: Int -> a -> Seq a
+ inBounds :: Int -> Seq a -> Bool
+ lookup :: Int -> Seq a -> a
+-lookupM :: (Monad m) => Int -> Seq a -> m a
++lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
+ lookupWithDefault :: a -> Int -> Seq a -> a
+ update :: Int -> a -> Seq a -> Seq a
+ adjust :: (a -> a) -> Int -> Seq a -> Seq a
+diff --git a/edison-core/src/Data/Edison/Seq/MyersStack.hs b/edison-core/src/Data/Edison/Seq/MyersStack.hs
+index 30eb197..eca46a5 100644
+--- a/edison-core/src/Data/Edison/Seq/MyersStack.hs
++++ b/edison-core/src/Data/Edison/Seq/MyersStack.hs
+@@ -49,8 +49,10 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
+ zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
+
+ import qualified Control.Applicative as App
++import Data.Edison.Prelude ( runFail_ )
+ import qualified Data.Edison.Seq as S ( Sequence(..) )
+ import Data.Edison.Seq.Defaults
++import qualified Control.Monad.Fail as Fail
+ import Control.Monad.Identity
+ import Data.Monoid
+ import Data.Semigroup as SG
+@@ -63,16 +65,16 @@ singleton :: a -> Seq a
+ lcons :: a -> Seq a -> Seq a
+ rcons :: a -> Seq a -> Seq a
+ append :: Seq a -> Seq a -> Seq a
+-lview :: (Monad m) => Seq a -> m (a, Seq a)
++lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ lhead :: Seq a -> a
+-lheadM :: (Monad m) => Seq a -> m a
++lheadM :: (Fail.MonadFail m) => Seq a -> m a
+ ltail :: Seq a -> Seq a
+-ltailM :: (Monad m) => Seq a -> m (Seq a)
+-rview :: (Monad m) => Seq a -> m (a, Seq a)
++ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
++rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ rhead :: Seq a -> a
+-rheadM :: (Monad m) => Seq a -> m a
++rheadM :: (Fail.MonadFail m) => Seq a -> m a
+ rtail :: Seq a -> Seq a
+-rtailM :: (Monad m) => Seq a -> m (Seq a)
++rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
+ null :: Seq a -> Bool
+ size :: Seq a -> Int
+ concat :: Seq (Seq a) -> Seq a
+@@ -103,7 +105,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
+ copy :: Int -> a -> Seq a
+ inBounds :: Int -> Seq a -> Bool
+ lookup :: Int -> Seq a -> a
+-lookupM :: (Monad m) => Int -> Seq a -> m a
++lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
+ lookupWithDefault :: a -> Int -> Seq a -> a
+ update :: Int -> a -> Seq a -> Seq a
+ adjust :: (a -> a) -> Int -> Seq a -> Seq a
+@@ -246,7 +248,7 @@ inBounds i xs = inb xs i
+ | i < j = (i >= 0)
+ | otherwise = inb xs' (i - j)
+
+-lookup i xs = runIdentity (lookupM i xs)
++lookup i xs = runFail_ (lookupM i xs)
+
+ lookupM i xs = look xs i
+ where look E _ = fail "MyersStack.lookup: bad subscript"
+diff --git a/edison-core/src/Data/Edison/Seq/RandList.hs b/edison-core/src/Data/Edison/Seq/RandList.hs
+index 8fe97bd..8d2d38b 100644
+--- a/edison-core/src/Data/Edison/Seq/RandList.hs
++++ b/edison-core/src/Data/Edison/Seq/RandList.hs
+@@ -55,8 +55,10 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
+
+ import qualified Control.Applicative as App
+
++import Data.Edison.Prelude ( runFail_ )
+ import qualified Data.Edison.Seq as S( Sequence(..) )
+ import Data.Edison.Seq.Defaults
++import qualified Control.Monad.Fail as Fail
+ import Control.Monad.Identity
+ import Data.Monoid
+ import Data.Semigroup as SG
+@@ -69,16 +71,16 @@ singleton :: a -> Seq a
+ lcons :: a -> Seq a -> Seq a
+ rcons :: a -> Seq a -> Seq a
+ append :: Seq a -> Seq a -> Seq a
+-lview :: (Monad m) => Seq a -> m (a, Seq a)
++lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ lhead :: Seq a -> a
+-lheadM :: (Monad m) => Seq a -> m a
++lheadM :: (Fail.MonadFail m) => Seq a -> m a
+ ltail :: Seq a -> Seq a
+-ltailM :: (Monad m) => Seq a -> m (Seq a)
+-rview :: (Monad m) => Seq a -> m (a, Seq a)
++ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
++rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ rhead :: Seq a -> a
+-rheadM :: (Monad m) => Seq a -> m a
++rheadM :: (Fail.MonadFail m) => Seq a -> m a
+ rtail :: Seq a -> Seq a
+-rtailM :: (Monad m) => Seq a -> m (Seq a)
++rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
+ null :: Seq a -> Bool
+ size :: Seq a -> Int
+ concat :: Seq (Seq a) -> Seq a
+@@ -109,7 +111,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
+ copy :: Int -> a -> Seq a
+ inBounds :: Int -> Seq a -> Bool
+ lookup :: Int -> Seq a -> a
+-lookupM :: (Monad m) => Int -> Seq a -> m a
++lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
+ lookupWithDefault :: a -> Int -> Seq a -> a
+ update :: Int -> a -> Seq a -> Seq a
+ adjust :: (a -> a) -> Int -> Seq a -> Seq a
+@@ -269,7 +271,7 @@ inBounds i xs = inb xs i
+ | i < j = (i >= 0)
+ | otherwise = inb xs (i - j)
+
+-lookup i xs = runIdentity (lookupM i xs)
++lookup i xs = runFail_ (lookupM i xs)
+
+ lookupM i xs = look xs i
+ where look E _ = fail "RandList.lookup bad subscript"
+diff --git a/edison-core/src/Data/Edison/Seq/RevSeq.hs b/edison-core/src/Data/Edison/Seq/RevSeq.hs
+index 3652c7b..87deea6 100644
+--- a/edison-core/src/Data/Edison/Seq/RevSeq.hs
++++ b/edison-core/src/Data/Edison/Seq/RevSeq.hs
+@@ -62,6 +62,7 @@ import qualified Data.Edison.Seq as S
+ import qualified Data.Edison.Seq.ListSeq as L
+ import Data.Edison.Seq.Defaults -- only used by concatMap
+ import Control.Monad
++import qualified Control.Monad.Fail as Fail
+ import Data.Monoid
+ import Data.Semigroup as SG
+ import Test.QuickCheck
+@@ -75,16 +76,16 @@ singleton :: S.Sequence s => a -> Rev s a
+ lcons :: S.Sequence s => a -> Rev s a -> Rev s a
+ rcons :: S.Sequence s => a -> Rev s a -> Rev s a
+ append :: S.Sequence s => Rev s a -> Rev s a -> Rev s a
+-lview :: (S.Sequence s, Monad m) => Rev s a -> m (a, Rev s a)
++lview :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m (a, Rev s a)
+ lhead :: S.Sequence s => Rev s a -> a
+-lheadM :: (S.Sequence s, Monad m) => Rev s a -> m a
++lheadM :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m a
+ ltail :: S.Sequence s => Rev s a -> Rev s a
+-ltailM :: (S.Sequence s, Monad m) => Rev s a -> m (Rev s a)
+-rview :: (S.Sequence s, Monad m) => Rev s a -> m (a, Rev s a)
++ltailM :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m (Rev s a)
++rview :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m (a, Rev s a)
+ rhead :: S.Sequence s => Rev s a -> a
+-rheadM :: (S.Sequence s, Monad m) => Rev s a -> m a
++rheadM :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m a
+ rtail :: S.Sequence s => Rev s a -> Rev s a
+-rtailM :: (S.Sequence s, Monad m) => Rev s a -> m (Rev s a)
++rtailM :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m (Rev s a)
+ null :: S.Sequence s => Rev s a -> Bool
+ size :: S.Sequence s => Rev s a -> Int
+ concat :: S.Sequence s => Rev s (Rev s a) -> Rev s a
+@@ -115,7 +116,7 @@ reduce1' :: S.Sequence s => (a -> a -> a) -> Rev s a -> a
+ copy :: S.Sequence s => Int -> a -> Rev s a
+ inBounds :: S.Sequence s => Int -> Rev s a -> Bool
+ lookup :: S.Sequence s => Int -> Rev s a -> a
+-lookupM :: (S.Sequence s, Monad m) => Int -> Rev s a -> m a
++lookupM :: (S.Sequence s, Fail.MonadFail m) => Int -> Rev s a -> m a
+ lookupWithDefault :: S.Sequence s => a -> Int -> Rev s a -> a
+ update :: S.Sequence s => Int -> a -> Rev s a -> Rev s a
+ adjust :: S.Sequence s => (a -> a) -> Int -> Rev s a -> Rev s a
+diff --git a/edison-core/src/Data/Edison/Seq/SimpleQueue.hs b/edison-core/src/Data/Edison/Seq/SimpleQueue.hs
+index 64592b6..754108f 100644
+--- a/edison-core/src/Data/Edison/Seq/SimpleQueue.hs
++++ b/edison-core/src/Data/Edison/Seq/SimpleQueue.hs
+@@ -59,6 +59,7 @@ import qualified Data.Edison.Seq.ListSeq as L
+ import Data.Monoid
+ import Data.Semigroup as SG
+ import Control.Monad
++import qualified Control.Monad.Fail as Fail
+ import Test.QuickCheck
+
+ -- signatures for exported functions
+@@ -68,16 +69,16 @@ singleton :: a -> Seq a
+ lcons :: a -> Seq a -> Seq a
+ rcons :: a -> Seq a -> Seq a
+ append :: Seq a -> Seq a -> Seq a
+-lview :: (Monad m) => Seq a -> m (a, Seq a)
++lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ lhead :: Seq a -> a
+-lheadM :: (Monad m) => Seq a -> m a
++lheadM :: (Fail.MonadFail m) => Seq a -> m a
+ ltail :: Seq a -> Seq a
+-ltailM :: (Monad m) => Seq a -> m (Seq a)
+-rview :: (Monad m) => Seq a -> m (a, Seq a)
++ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
++rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
+ rhead :: Seq a -> a
+-rheadM :: (Monad m) => Seq a -> m a
++rheadM :: (Fail.MonadFail m) => Seq a -> m a
+ rtail :: Seq a -> Seq a
+-rtailM :: (Monad m) => Seq a -> m (Seq a)
++rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
+ null :: Seq a -> Bool
+ size :: Seq a -> Int
+ concat :: Seq (Seq a) -> Seq a
+@@ -108,7 +109,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
+ copy :: Int -> a -> Seq a
+ inBounds :: Int -> Seq a -> Bool
+ lookup :: Int -> Seq a -> a
+-lookupM :: (Monad m) => Int -> Seq a -> m a
++lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
+ lookupWithDefault :: a -> Int -> Seq a -> a
+ update :: Int -> a -> Seq a -> Seq a
+ adjust :: (a -> a) -> Int -> Seq a -> Seq a
+diff --git a/edison-core/src/Data/Edison/Seq/SizedSeq.hs b/edison-core/src/Data/Edison/Seq/SizedSeq.hs
+index a50b800..65c0ee9 100644
+--- a/edison-core/src/Data/Edison/Seq/SizedSeq.hs
++++ b/edison-core/src/Data/Edison/Seq/SizedSeq.hs
+@@ -54,6 +54,7 @@ import Data.Edison.Seq.Defaults -- only used by concatMap
+ import Data.Monoid
+ import Data.Semigroup as SG
+ import Control.Monad
++import qualified Control.Monad.Fail as Fail
+ import Test.QuickCheck
+
+
+@@ -65,16 +66,16 @@ singleton :: S.Sequence s => a -> Sized s a
+ lcons :: S.Sequence s => a -> Sized s a -> Sized s a
+ rcons :: S.Sequence s => a -> Sized s a -> Sized s a
+ append :: S.Sequence s => Sized s a -> Sized s a -> Sized s a
+-lview :: (S.Sequence s, Monad m) => Sized s a -> m (a, Sized s a)
++lview :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m (a, Sized s a)
+ lhead :: S.Sequence s => Sized s a -> a
+-lheadM :: (S.Sequence s, Monad m) => Sized s a -> m a
++lheadM :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m a
+ ltail :: S.Sequence s => Sized s a -> Sized s a
+-ltailM :: (S.Sequence s, Monad m) => Sized s a -> m (Sized s a)
+-rview :: (S.Sequence s, Monad m) => Sized s a -> m (a, Sized s a)
++ltailM :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m (Sized s a)
++rview :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m (a, Sized s a)
+ rhead :: S.Sequence s => Sized s a -> a
+-rheadM :: (S.Sequence s, Monad m) => Sized s a -> m a
++rheadM :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m a
+ rtail :: S.Sequence s => Sized s a -> Sized s a
+-rtailM :: (S.Sequence s, Monad m) => Sized s a -> m (Sized s a)
++rtailM :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m (Sized s a)
+ null :: S.Sequence s => Sized s a -> Bool
+ size :: S.Sequence s => Sized s a -> Int
+ concat :: S.Sequence s => Sized s (Sized s a) -> Sized s a
+@@ -105,7 +106,7 @@ reduce1' :: S.Sequence s => (a -> a -> a) -> Sized s a -> a
+ copy :: S.Sequence s => Int -> a -> Sized s a
+ inBounds :: S.Sequence s => Int -> Sized s a -> Bool
+ lookup :: S.Sequence s => Int -> Sized s a -> a
+-lookupM :: (S.Sequence s, Monad m) => Int -> Sized s a -> m a
++lookupM :: (S.Sequence s, Fail.MonadFail m) => Int -> Sized s a -> m a
+ lookupWithDefault :: S.Sequence s => a -> Int -> Sized s a -> a
+ update :: S.Sequence s => Int -> a -> Sized s a -> Sized s a
+ adjust :: S.Sequence s => (a -> a) -> Int -> Sized s a -> Sized s a
More information about the arch-commits
mailing list