Gentoo Archives: gentoo-commits

From: Sergei Trofimovich <slyfox@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] repo/gentoo:master commit in: dev-haskell/edisoncore/files/, dev-haskell/edisoncore/
Date: Tue, 13 Oct 2020 06:50:26
Message-Id: 1602571817.537a81be2b06a3637494c8c01726dbfcc7dfceb0.slyfox@gentoo
1 commit: 537a81be2b06a3637494c8c01726dbfcc7dfceb0
2 Author: Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
3 AuthorDate: Tue Oct 13 06:49:54 2020 +0000
4 Commit: Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
5 CommitDate: Tue Oct 13 06:50:17 2020 +0000
6 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=537a81be
7
8 dev-haskell/edisoncore: move large patch out of files/
9
10 Reported-by: Joonas Niilola
11 Closes: https://bugs.gentoo.org/748165
12 Package-Manager: Portage-3.0.8, Repoman-3.0.1
13 Signed-off-by: Sergei Trofimovich <slyfox <AT> gentoo.org>
14
15 dev-haskell/edisoncore/Manifest | 1 +
16 .../edisoncore/edisoncore-1.3.2.1-r1.ebuild | 9 +-
17 .../files/edisoncore-1.3.2.1-ghc-8.8.patch | 1268 --------------------
18 3 files changed, 7 insertions(+), 1271 deletions(-)
19
20 diff --git a/dev-haskell/edisoncore/Manifest b/dev-haskell/edisoncore/Manifest
21 index 537ebb856cf..a583e0ce2d1 100644
22 --- a/dev-haskell/edisoncore/Manifest
23 +++ b/dev-haskell/edisoncore/Manifest
24 @@ -1 +1,2 @@
25 DIST EdisonCore-1.3.2.1.tar.gz 82522 BLAKE2B 758e02e462d4f86b95a66792ce26dda6d1a00506a8071f3716f9a7484fc992af9e1709a9bbb958ee71175b2c51c4574493a35b6eaa7a1bfab415ed4ce7e2a8b4 SHA512 6812b04edb1abdfc2486d66bb86d6370b76667de1603ab421d92a6ecc17a25014e0ab97f53dd4f1e75cacf32c31611e8f2dd6c740c840e349c3c762ae00df65f
26 +DIST edisoncore-1.3.2.1-ghc-8.8.patch 57508 BLAKE2B 0651b4be26461cfe2bd3a57742ee138863ec6b47940065754642bd6320d814dfc8cb63bd4b37131bb3135752d03cdab335c2f1ebf5ccd87bd9219bd39d43c3e3 SHA512 9e5b60ec6023f2be4af4ecae0fcf00f8b6f758ea6bbd21c3dea4d3dd9ff128736e743e9a020a445e27e4ff1fb6c43061427f042353fe84528f2d715b5784302b
27
28 diff --git a/dev-haskell/edisoncore/edisoncore-1.3.2.1-r1.ebuild b/dev-haskell/edisoncore/edisoncore-1.3.2.1-r1.ebuild
29 index 87a59c476f7..c2550f9bba9 100644
30 --- a/dev-haskell/edisoncore/edisoncore-1.3.2.1-r1.ebuild
31 +++ b/dev-haskell/edisoncore/edisoncore-1.3.2.1-r1.ebuild
32 @@ -1,4 +1,4 @@
33 -# Copyright 1999-2019 Gentoo Authors
34 +# Copyright 1999-2020 Gentoo Authors
35 # Distributed under the terms of the GNU General Public License v2
36
37 EAPI=7
38 @@ -13,7 +13,10 @@ MY_P="${MY_PN}-${PV}"
39
40 DESCRIPTION="A library of efficent, purely-functional data structures (Core Implementations)"
41 HOMEPAGE="http://rwd.rdockins.name/edison/home/"
42 -SRC_URI="https://hackage.haskell.org/package/${MY_P}/${MY_P}.tar.gz"
43 +SRC_URI="
44 + https://hackage.haskell.org/package/${MY_P}/${MY_P}.tar.gz
45 + https://dev.gentoo.org/~slyfox/distfiles/edisoncore-1.3.2.1-ghc-8.8.patch
46 +"
47
48 LICENSE="MIT"
49 SLOT="0/${PV}"
50 @@ -32,4 +35,4 @@ DEPEND="${RDEPEND}
51
52 S="${WORKDIR}/${MY_P}"
53
54 -PATCHES=( "${FILESDIR}/${PN}-1.3.2.1-ghc-8.8.patch" )
55 +PATCHES=( "${DISTDIR}/${PN}-1.3.2.1-ghc-8.8.patch" )
56
57 diff --git a/dev-haskell/edisoncore/files/edisoncore-1.3.2.1-ghc-8.8.patch b/dev-haskell/edisoncore/files/edisoncore-1.3.2.1-ghc-8.8.patch
58 deleted file mode 100644
59 index 5589433edc6..00000000000
60 --- a/dev-haskell/edisoncore/files/edisoncore-1.3.2.1-ghc-8.8.patch
61 +++ /dev/null
62 @@ -1,1268 +0,0 @@
63 -diff --git a/EdisonCore.cabal b/EdisonCore.cabal
64 -index 901cd83..ad1af00 100644
65 ---- a/EdisonCore.cabal
66 -+++ b/EdisonCore.cabal
67 -@@ -62,8 +62,10 @@ Library
68 - array
69 -
70 - if impl(ghc < 8.0)
71 -- -- Provide/emulate Data.Semigroups` API for pre-GHC-8
72 -- Build-Depends: semigroups == 0.18.*
73 -+ Build-Depends:
74 -+ fail,
75 -+ -- Provide/emulate Data.Semigroups` API for pre-GHC-8
76 -+ semigroups == 0.18.*
77 -
78 - Default-Language: Haskell2010
79 - Default-Extensions:
80 -diff --git a/src/Data/Edison/Assoc/AssocList.hs b/src/Data/Edison/Assoc/AssocList.hs
81 -index c577492..15d9884 100644
82 ---- a/src/Data/Edison/Assoc/AssocList.hs
83 -+++ b/src/Data/Edison/Assoc/AssocList.hs
84 -@@ -58,8 +58,9 @@ import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
85 - import qualified Prelude
86 - import Data.Monoid
87 - import Data.Semigroup as SG
88 --import Control.Monad.Identity
89 -+import qualified Control.Monad.Fail as Fail
90 - import qualified Data.Edison.Assoc as A
91 -+import Data.Edison.Prelude ( runFail_ )
92 - import qualified Data.Edison.Seq as S
93 - import qualified Data.Edison.Seq.BinaryRandList as RL
94 - import Data.Edison.Assoc.Defaults
95 -@@ -82,10 +83,10 @@ size :: Eq k => FM k a -> Int
96 - member :: Eq k => k -> FM k a -> Bool
97 - count :: Eq k => k -> FM k a -> Int
98 - lookup :: Eq k => k -> FM k a -> a
99 --lookupM :: (Eq k, Monad rm) => k -> FM k a -> rm a
100 -+lookupM :: (Eq k, Fail.MonadFail rm) => k -> FM k a -> rm a
101 - lookupAll :: (Eq k,S.Sequence seq) => k -> FM k a -> seq a
102 - lookupAndDelete :: Eq k => k -> FM k a -> (a,FM k a)
103 --lookupAndDeleteM :: (Eq k,Monad rm) => k -> FM k a -> rm (a,FM k a)
104 -+lookupAndDeleteM :: (Eq k, Fail.MonadFail rm) => k -> FM k a -> rm (a,FM k a)
105 - lookupAndDeleteAll :: (Eq k,S.Sequence seq) => k -> FM k a -> (seq a,FM k a)
106 - lookupWithDefault :: Eq k => a -> k -> FM k a -> a
107 - adjust :: Eq k => (a -> a) -> k -> FM k a -> FM k a
108 -@@ -143,11 +144,11 @@ unionSeqWithKey :: (Eq k,S.Sequence seq) =>
109 - (k -> a -> a -> a) -> seq (FM k a) -> FM k a
110 - intersectionWithKey :: Eq k => (k -> a -> b -> c) -> FM k a -> FM k b -> FM k c
111 -
112 --minView :: (Ord k,Monad m) => FM k a -> m (a,FM k a)
113 -+minView :: (Ord k, Fail.MonadFail m) => FM k a -> m (a,FM k a)
114 - minElem :: Ord k => FM k a -> a
115 - deleteMin :: Ord k => FM k a -> FM k a
116 - unsafeInsertMin :: Ord k => k -> a -> FM k a -> FM k a
117 --maxView :: (Ord k,Monad m) => FM k a -> m (a,FM k a)
118 -+maxView :: (Ord k, Fail.MonadFail m) => FM k a -> m (a,FM k a)
119 - maxElem :: Ord k => FM k a -> a
120 - deleteMax :: Ord k => FM k a -> FM k a
121 - unsafeInsertMax :: Ord k => k -> a -> FM k a -> FM k a
122 -@@ -169,9 +170,9 @@ partitionLT_GE :: Ord k => k -> FM k a -> (FM k a,FM k a)
123 - partitionLE_GT :: Ord k => k -> FM k a -> (FM k a,FM k a)
124 - partitionLT_GT :: Ord k => k -> FM k a -> (FM k a,FM k a)
125 -
126 --minViewWithKey :: (Ord k,Monad m) => FM k a -> m ((k, a), FM k a)
127 -+minViewWithKey :: (Ord k, Fail.MonadFail m) => FM k a -> m ((k, a), FM k a)
128 - minElemWithKey :: Ord k => FM k a -> (k,a)
129 --maxViewWithKey :: (Ord k,Monad m) => FM k a -> m ((k, a), FM k a)
130 -+maxViewWithKey :: (Ord k, Fail.MonadFail m) => FM k a -> m ((k, a), FM k a)
131 - maxElemWithKey :: Ord k => FM k a -> (k,a)
132 - foldrWithKey :: Ord k => (k -> a -> b -> b) -> b -> FM k a -> b
133 - foldlWithKey :: Ord k => (b -> k -> a -> b) -> b -> FM k a -> b
134 -@@ -309,7 +310,7 @@ count _ E = 0
135 - count key (I k _ m) | key == k = 1
136 - | otherwise = count key m
137 -
138 --lookup key m = runIdentity (lookupM key m)
139 -+lookup key m = runFail_ (lookupM key m)
140 -
141 - lookupM _ E = fail "AssocList.lookup: lookup failed"
142 - lookupM key (I k x m) | key == k = return x
143 -@@ -319,7 +320,7 @@ lookupAll _ E = S.empty
144 - lookupAll key (I k x m) | key == k = S.singleton x
145 - | otherwise = lookupAll key m
146 -
147 --lookupAndDelete key m = runIdentity (lookupAndDeleteM key m)
148 -+lookupAndDelete key m = runFail_ (lookupAndDeleteM key m)
149 -
150 - lookupAndDeleteM _ E = fail "AssocList.lookupAndDeleteM: lookup failed"
151 - lookupAndDeleteM key (I k x m)
152 -diff --git a/src/Data/Edison/Assoc/Defaults.hs b/src/Data/Edison/Assoc/Defaults.hs
153 -index a9ef520..8e2b37d 100644
154 ---- a/src/Data/Edison/Assoc/Defaults.hs
155 -+++ b/src/Data/Edison/Assoc/Defaults.hs
156 -@@ -15,6 +15,8 @@ module Data.Edison.Assoc.Defaults where
157 -
158 - import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
159 -
160 -+import qualified Control.Monad.Fail as Fail
161 -+
162 - import Data.Edison.Assoc
163 - import qualified Data.Edison.Seq as S
164 - import qualified Data.Edison.Seq.ListSeq as L
165 -@@ -190,7 +192,7 @@ lookupAndDeleteDefault k m =
166 - Nothing -> error (instanceName m ++ ".lookupAndDelete: lookup failed")
167 - Just x -> (x, delete k m)
168 -
169 --lookupAndDeleteMDefault :: (Monad rm, AssocX m k) => k -> m a -> rm (a, m a)
170 -+lookupAndDeleteMDefault :: (Fail.MonadFail rm, AssocX m k) => k -> m a -> rm (a, m a)
171 - lookupAndDeleteMDefault k m =
172 - case lookupM k m of
173 - Nothing -> fail (instanceName m ++ ".lookupAndDelete: lookup failed")
174 -diff --git a/src/Data/Edison/Assoc/PatriciaLoMap.hs b/src/Data/Edison/Assoc/PatriciaLoMap.hs
175 -index 3073f83..43c2d85 100644
176 ---- a/src/Data/Edison/Assoc/PatriciaLoMap.hs
177 -+++ b/src/Data/Edison/Assoc/PatriciaLoMap.hs
178 -@@ -55,10 +55,11 @@ module Data.Edison.Assoc.PatriciaLoMap (
179 -
180 - import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
181 - import qualified Prelude
182 --import Control.Monad.Identity (runIdentity)
183 -+import qualified Control.Monad.Fail as Fail
184 - import Data.Monoid
185 - import Data.Semigroup as SG
186 - import qualified Data.Edison.Assoc as A
187 -+import Data.Edison.Prelude ( runFail_ )
188 - import qualified Data.Edison.Seq as S
189 - import qualified Data.Edison.Seq.ListSeq as L
190 - import Data.Edison.Assoc.Defaults
191 -@@ -210,9 +211,9 @@ member k (L j _) = (j == k)
192 - member k (B _ m t0 t1) = if zeroBit k m then member k t0 else member k t1
193 -
194 - lookup :: Int -> FM a -> a
195 --lookup k m = runIdentity (lookupM k m)
196 -+lookup k m = runFail_ (lookupM k m)
197 -
198 --lookupM :: (Monad rm) => Int -> FM a -> rm a
199 -+lookupM :: (Fail.MonadFail rm) => Int -> FM a -> rm a
200 - lookupM _ E = fail "PatriciaLoMap.lookup: lookup failed"
201 - lookupM k (L j x)
202 - | j == k = return x
203 -@@ -233,7 +234,7 @@ lookupAndDelete = doLookupAndDelete
204 - (error "PatriciaLoMap.lookupAndDelete: lookup failed")
205 - (,)
206 -
207 --lookupAndDeleteM :: Monad m => Int -> FM a -> m (a, FM a)
208 -+lookupAndDeleteM :: Fail.MonadFail m => Int -> FM a -> m (a, FM a)
209 - lookupAndDeleteM = doLookupAndDelete
210 - (fail "PatriciaLoMap.lookupAndDelete: lookup failed")
211 - (\x m -> return (x,m))
212 -@@ -583,25 +584,25 @@ ordListFM_rev (B _ _ t0 t1) = merge (ordListFM_rev t0) (ordListFM_rev t1)
213 - GT -> x : merge xs (y:ys)
214 - EQ -> error "PatriciaLoMap: bug in ordListFM_rev"
215 -
216 --minView :: Monad m => FM a -> m (a, FM a)
217 -+minView :: Fail.MonadFail m => FM a -> m (a, FM a)
218 - minView fm =
219 - case ordListFM fm of
220 - [] -> fail $ moduleName++".minView: empty map"
221 - ((k,x):_) -> return (x,delete k fm)
222 -
223 --minViewWithKey :: Monad m => FM a -> m ((Int, a), FM a)
224 -+minViewWithKey :: Fail.MonadFail m => FM a -> m ((Int, a), FM a)
225 - minViewWithKey fm =
226 - case ordListFM fm of
227 - [] -> fail $ moduleName++".minViewWithKey: empty map"
228 - ((k,x):_) -> return ((k,x),delete k fm)
229 -
230 --maxView :: Monad m => FM a -> m (a, FM a)
231 -+maxView :: Fail.MonadFail m => FM a -> m (a, FM a)
232 - maxView fm =
233 - case ordListFM_rev fm of
234 - [] -> fail $ moduleName++".maxView: empty map"
235 - ((k,x):_) -> return (x,delete k fm)
236 -
237 --maxViewWithKey :: Monad m => FM a -> m ((Int, a), FM a)
238 -+maxViewWithKey :: Fail.MonadFail m => FM a -> m ((Int, a), FM a)
239 - maxViewWithKey fm =
240 - case ordListFM_rev fm of
241 - [] -> fail $ moduleName++".maxViewWithKey: empty map"
242 -diff --git a/src/Data/Edison/Assoc/StandardMap.hs b/src/Data/Edison/Assoc/StandardMap.hs
243 -index 5ca48c5..e7b6a0e 100644
244 ---- a/src/Data/Edison/Assoc/StandardMap.hs
245 -+++ b/src/Data/Edison/Assoc/StandardMap.hs
246 -@@ -51,6 +51,7 @@ module Data.Edison.Assoc.StandardMap (
247 -
248 - import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
249 - import qualified Prelude
250 -+import qualified Control.Monad.Fail as Fail
251 - import qualified Data.Edison.Assoc as A
252 - import qualified Data.Edison.Seq as S
253 - import qualified Data.Edison.Seq.ListSeq as L
254 -@@ -81,10 +82,10 @@ member :: Ord k => k -> FM k a -> Bool
255 - count :: Ord k => k -> FM k a -> Int
256 - lookup :: Ord k => k -> FM k a -> a
257 - lookupAll :: (Ord k,S.Sequence seq) => k -> FM k a -> seq a
258 --lookupM :: (Ord k,Monad m) => k -> FM k a -> m a
259 -+lookupM :: (Ord k, Fail.MonadFail m) => k -> FM k a -> m a
260 - lookupWithDefault :: Ord k => a -> k -> FM k a -> a
261 - lookupAndDelete :: Ord k => k -> FM k a -> (a, FM k a)
262 --lookupAndDeleteM :: (Ord k,Monad m) => k -> FM k a -> m (a, FM k a)
263 -+lookupAndDeleteM :: (Ord k, Fail.MonadFail m) => k -> FM k a -> m (a, FM k a)
264 - lookupAndDeleteAll :: (Ord k,S.Sequence seq) => k -> FM k a -> (seq a,FM k a)
265 - adjust :: Ord k => (a->a) -> k -> FM k a -> FM k a
266 - adjustAll :: Ord k => (a->a) -> k -> FM k a -> FM k a
267 -@@ -103,11 +104,11 @@ filter :: Ord k => (a -> Bool) -> FM k a -> FM k a
268 - partition :: Ord k => (a -> Bool) -> FM k a -> (FM k a,FM k a)
269 - elements :: (Ord k,S.Sequence seq) => FM k a -> seq a
270 -
271 --minView :: (Ord k,Monad m) => FM k a -> m (a, FM k a)
272 -+minView :: (Ord k, Fail.MonadFail m) => FM k a -> m (a, FM k a)
273 - minElem :: Ord k => FM k a -> a
274 - deleteMin :: Ord k => FM k a -> FM k a
275 - unsafeInsertMin :: Ord k => k -> a -> FM k a -> FM k a
276 --maxView :: (Ord k,Monad m) => FM k a -> m (a, FM k a)
277 -+maxView :: (Ord k, Fail.MonadFail m) => FM k a -> m (a, FM k a)
278 - maxElem :: Ord k => FM k a -> a
279 - deleteMax :: Ord k => FM k a -> FM k a
280 - unsafeInsertMax :: Ord k => k -> a -> FM k a -> FM k a
281 -@@ -165,9 +166,9 @@ foldWithKey' :: Ord k => (k -> a -> b -> b) -> b -> FM k a -> b
282 - filterWithKey :: Ord k => (k -> a -> Bool) -> FM k a -> FM k a
283 - partitionWithKey :: Ord k => (k -> a -> Bool) -> FM k a -> (FM k a,FM k a)
284 -
285 --minViewWithKey :: (Ord k,Monad m) => FM k a -> m ((k, a), FM k a)
286 -+minViewWithKey :: (Ord k, Fail.MonadFail m) => FM k a -> m ((k, a), FM k a)
287 - minElemWithKey :: Ord k => FM k a -> (k,a)
288 --maxViewWithKey :: (Ord k,Monad m) => FM k a -> m ((k, a), FM k a)
289 -+maxViewWithKey :: (Ord k, Fail.MonadFail m) => FM k a -> m ((k, a), FM k a)
290 - maxElemWithKey :: Ord k => FM k a -> (k,a)
291 - foldrWithKey :: (k -> a -> b -> b) -> b -> FM k a -> b
292 - foldlWithKey :: (b -> k -> a -> b) -> b -> FM k a -> b
293 -diff --git a/src/Data/Edison/Assoc/TernaryTrie.hs b/src/Data/Edison/Assoc/TernaryTrie.hs
294 -index 8b2dd57..431b348 100644
295 ---- a/src/Data/Edison/Assoc/TernaryTrie.hs
296 -+++ b/src/Data/Edison/Assoc/TernaryTrie.hs
297 -@@ -55,8 +55,10 @@ module Data.Edison.Assoc.TernaryTrie (
298 - import Prelude hiding (null,map,lookup,foldr,foldl,foldr1,foldl1,filter)
299 - import qualified Prelude
300 - import qualified Data.Edison.Assoc as A
301 -+import Data.Edison.Prelude ( runFail_ )
302 - import qualified Data.Edison.Seq as S
303 - import qualified Data.List as L
304 -+import qualified Control.Monad.Fail as Fail
305 - import Control.Monad.Identity
306 - import Data.Monoid
307 - import Data.Semigroup as SG
308 -@@ -83,10 +85,10 @@ size :: Ord k => FM k a -> Int
309 - member :: Ord k => [k] -> FM k a -> Bool
310 - count :: Ord k => [k] -> FM k a -> Int
311 - lookup :: Ord k => [k] -> FM k a -> a
312 --lookupM :: (Ord k, Monad rm) => [k] -> FM k a -> rm a
313 -+lookupM :: (Ord k, Fail.MonadFail rm) => [k] -> FM k a -> rm a
314 - lookupAll :: (Ord k,S.Sequence seq) => [k] -> FM k a -> seq a
315 - lookupAndDelete :: Ord k => [k] -> FM k a -> (a, FM k a)
316 --lookupAndDeleteM :: (Ord k, Monad rm) => [k] -> FM k a -> rm (a, FM k a)
317 -+lookupAndDeleteM :: (Ord k, Fail.MonadFail rm) => [k] -> FM k a -> rm (a, FM k a)
318 - lookupAndDeleteAll :: (Ord k, S.Sequence seq) => [k] -> FM k a -> (seq a,FM k a)
319 - lookupWithDefault :: Ord k => a -> [k] -> FM k a -> a
320 - adjust :: Ord k => (a -> a) -> [k] -> FM k a -> FM k a
321 -@@ -527,7 +529,7 @@ member = memberUsingLookupM
322 -
323 - count = countUsingMember
324 -
325 --lookup m k = runIdentity (lookupM m k)
326 -+lookup m k = runFail_ (lookupM m k)
327 -
328 - lookupM [] (FM Nothing _)
329 - = fail "TernaryTrie.lookup: lookup failed"
330 -@@ -854,18 +856,18 @@ intersectionWithKey f
331 -
332 - -- OrdAssocX
333 -
334 --minViewFMB :: Monad m => FMB k a -> (FMB k a -> FM k a) -> m (a, FM k a)
335 -+minViewFMB :: Fail.MonadFail m => FMB k a -> (FMB k a -> FM k a) -> m (a, FM k a)
336 - minViewFMB E _ = fail $ moduleName++".minView: empty map"
337 - minViewFMB (I i k (Just v) E m r) f = return (v, f (I i k Nothing E m r))
338 - minViewFMB (I _ _ Nothing E (FMB' E) _) _ = error $ moduleName++".minView: bug!"
339 - minViewFMB (I _ k Nothing E (FMB' m) r) f = minViewFMB m (\m' -> f (mkVBalancedFMB k Nothing E (FMB' m') r))
340 - minViewFMB (I _ k mv l m r) f = minViewFMB l (\l' -> f (mkVBalancedFMB k mv l' m r))
341 -
342 --minView :: Monad m => FM k a -> m (a,FM k a)
343 -+minView :: Fail.MonadFail m => FM k a -> m (a,FM k a)
344 - minView (FM (Just v) fmb) = return (v, FM Nothing fmb)
345 - minView (FM Nothing fmb) = minViewFMB fmb (FM Nothing)
346 -
347 --minViewWithKeyFMB :: Monad m => FMB k a -> ([k] -> [k]) -> (FMB k a -> FM k a) -> m (([k],a),FM k a)
348 -+minViewWithKeyFMB :: Fail.MonadFail m => FMB k a -> ([k] -> [k]) -> (FMB k a -> FM k a) -> m (([k],a),FM k a)
349 - minViewWithKeyFMB E _ _ = fail $ moduleName++".minView: empty map"
350 - minViewWithKeyFMB (I i k (Just v) E m r) kf f = return ((kf [k],v),f (I i k Nothing E m r))
351 - minViewWithKeyFMB (I _ _ Nothing E (FMB' E) _) _ _ = error $ moduleName++".minViewWithKey: bug!"
352 -@@ -874,7 +876,7 @@ minViewWithKeyFMB (I _ k Nothing E (FMB' m) r) kf f = minViewWithKeyFMB m (kf .
353 - minViewWithKeyFMB (I _ k mv l m r) kf f = minViewWithKeyFMB l kf
354 - (\l' -> f (mkVBalancedFMB k mv l' m r))
355 -
356 --minViewWithKey :: Monad m => FM k a -> m (([k],a),FM k a)
357 -+minViewWithKey :: Fail.MonadFail m => FM k a -> m (([k],a),FM k a)
358 - minViewWithKey (FM (Just v) fmb) = return (([],v),FM Nothing fmb)
359 - minViewWithKey (FM Nothing fmb) = minViewWithKeyFMB fmb id (FM Nothing)
360 -
361 -@@ -906,7 +908,7 @@ deleteMin = deleteMinUsingMinView
362 - unsafeInsertMin :: Ord k => [k] -> a -> FM k a -> FM k a
363 - unsafeInsertMin = insert
364 -
365 --maxViewFMB :: Monad m => FMB k a -> (FMB k a -> FM k a) -> m (a, FM k a)
366 -+maxViewFMB :: Fail.MonadFail m => FMB k a -> (FMB k a -> FM k a) -> m (a, FM k a)
367 - maxViewFMB (I _ _ (Just v) l (FMB' E) E) f = return (v, f l)
368 - --maxViewFMB (I i k (Just v) l (FMB' E) E) f = return (v, f (I i k Nothing l (FMB' E) E))
369 - maxViewFMB (I _ _ Nothing _ (FMB' E) E) _ = error $ moduleName++".maxView: bug!"
370 -@@ -914,7 +916,7 @@ maxViewFMB (I i k mv l (FMB' m) E) f = maxViewFMB m (\m' -> f (I i k mv l
371 - maxViewFMB (I _ k mv l m r) f = maxViewFMB r (\r' -> f (mkVBalancedFMB k mv l m r'))
372 - maxViewFMB E _ = error $ moduleName++".maxView: bug!"
373 -
374 --maxView :: Monad m => FM k a -> m (a, FM k a)
375 -+maxView :: Fail.MonadFail m => FM k a -> m (a, FM k a)
376 - maxView (FM Nothing E) = fail $ moduleName++".maxView: empty map"
377 - maxView (FM (Just v) E) = return (v,FM Nothing E)
378 - maxView (FM mv fmb) = maxViewFMB fmb (FM mv)
379 -@@ -930,7 +932,7 @@ maxViewWithKeyFMB (I _ k mv l m r) kf f = maxViewWithKeyFMB r kf
380 - maxViewWithKeyFMB E _ _ = error $ moduleName++".maxViewWithKey: bug!"
381 -
382 -
383 --maxViewWithKey :: Monad m => FM k a -> m (([k],a), FM k a)
384 -+maxViewWithKey :: Fail.MonadFail m => FM k a -> m (([k],a), FM k a)
385 - maxViewWithKey (FM Nothing E) = fail $ moduleName++".maxViewWithKey: empty map"
386 - maxViewWithKey (FM (Just v) E) = return (([],v),FM Nothing E)
387 - maxViewWithKey (FM mv fmb) = maxViewWithKeyFMB fmb id (FM mv)
388 -diff --git a/src/Data/Edison/Coll/Defaults.hs b/src/Data/Edison/Coll/Defaults.hs
389 -index 213ed36..d927f38 100644
390 ---- a/src/Data/Edison/Coll/Defaults.hs
391 -+++ b/src/Data/Edison/Coll/Defaults.hs
392 -@@ -14,8 +14,9 @@
393 - module Data.Edison.Coll.Defaults where
394 -
395 - import Prelude hiding (null,foldr,foldl,foldr1,foldl1,lookup,filter)
396 --import Control.Monad.Identity
397 -+import qualified Control.Monad.Fail as Fail
398 -
399 -+import Data.Edison.Prelude ( runFail_ )
400 - import Data.Edison.Coll
401 - import qualified Data.Edison.Seq as S
402 - import qualified Data.Edison.Seq.ListSeq as L
403 -@@ -81,7 +82,7 @@ disjointUsingToOrdList xs ys = disj (toOrdList xs) (toOrdList ys)
404 - disj _ _ = True
405 -
406 - intersectWitnessUsingToOrdList ::
407 -- (OrdColl c a, Monad m) => c -> c -> m (a,a)
408 -+ (OrdColl c a, Fail.MonadFail m) => c -> c -> m (a,a)
409 - intersectWitnessUsingToOrdList as bs = witness (toOrdList as) (toOrdList bs)
410 - where witness a@(x:xs) b@(y:ys) =
411 - case compare x y of
412 -@@ -92,7 +93,7 @@ intersectWitnessUsingToOrdList as bs = witness (toOrdList as) (toOrdList bs)
413 - witness _ _ = fail $ instanceName as ++ ".intersect: failed"
414 -
415 - lookupUsingLookupM :: Coll c a => a -> c -> a
416 --lookupUsingLookupM x ys = runIdentity (lookupM x ys)
417 -+lookupUsingLookupM x ys = runFail_ (lookupM x ys)
418 -
419 - lookupUsingLookupAll :: Coll c a => a -> c -> a
420 - lookupUsingLookupAll x ys =
421 -@@ -100,7 +101,7 @@ lookupUsingLookupAll x ys =
422 - (y:_) -> y
423 - [] -> error $ instanceName ys ++ ".lookup: lookup failed"
424 -
425 --lookupMUsingLookupAll :: (Coll c a, Monad m) => a -> c -> m a
426 -+lookupMUsingLookupAll :: (Coll c a, Fail.MonadFail m) => a -> c -> m a
427 - lookupMUsingLookupAll x ys =
428 - case lookupAll x ys of
429 - (y:_) -> return y
430 -diff --git a/src/Data/Edison/Coll/EnumSet.hs b/src/Data/Edison/Coll/EnumSet.hs
431 -index c93ab07..cce68e6 100644
432 ---- a/src/Data/Edison/Coll/EnumSet.hs
433 -+++ b/src/Data/Edison/Coll/EnumSet.hs
434 -@@ -157,6 +157,7 @@ module Data.Edison.Coll.EnumSet (
435 -
436 - import qualified Prelude
437 - import Prelude hiding (filter,foldl,foldr,null,map,lookup,foldl1,foldr1)
438 -+import qualified Control.Monad.Fail as Fail
439 - import qualified Data.Bits as Bits
440 - import Data.Bits hiding (complement)
441 - import Data.Word
442 -@@ -251,7 +252,7 @@ count = countUsingMember
443 - lookup :: (Eq a, Enum a) => a -> Set a -> a
444 - lookup = lookupUsingLookupAll
445 -
446 --lookupM :: (Eq a, Enum a, Monad m) => a -> Set a -> m a
447 -+lookupM :: (Eq a, Enum a, Fail.MonadFail m) => a -> Set a -> m a
448 - lookupM x s
449 - | member x s = return x
450 - | otherwise = fail (moduleName++".lookupM: lookup failed")
451 -@@ -340,12 +341,12 @@ deleteMax (Set w)
452 - | w == 0 = empty
453 - | otherwise = Set $ clearBit w $ msb w
454 -
455 --minView :: (Enum a, Monad m) => Set a -> m (a, Set a)
456 -+minView :: (Enum a, Fail.MonadFail m) => Set a -> m (a, Set a)
457 - minView (Set w)
458 - | w == 0 = fail (moduleName++".minView: empty set")
459 - | otherwise = let i = lsb w in return (toEnum i,Set $ clearBit w i)
460 -
461 --maxView :: (Enum a, Monad m) => Set a -> m (a, Set a)
462 -+maxView :: (Enum a, Fail.MonadFail m) => Set a -> m (a, Set a)
463 - maxView (Set w)
464 - | w == 0 = fail (moduleName++".maxView: empty set")
465 - | otherwise = let i = msb w in return (toEnum i, Set $ clearBit w i)
466 -diff --git a/src/Data/Edison/Coll/LazyPairingHeap.hs b/src/Data/Edison/Coll/LazyPairingHeap.hs
467 -index e41ce2e..3dcebe4 100644
468 ---- a/src/Data/Edison/Coll/LazyPairingHeap.hs
469 -+++ b/src/Data/Edison/Coll/LazyPairingHeap.hs
470 -@@ -49,6 +49,7 @@ import Data.List (sort)
471 - import Data.Monoid
472 - import Data.Semigroup as SG
473 - import Control.Monad
474 -+import qualified Control.Monad.Fail as Fail
475 - import Test.QuickCheck
476 -
477 - moduleName :: String
478 -@@ -359,7 +360,7 @@ lookupAll y h = look h S.empty
479 - EQ -> S.lcons x $ look i $ look xs rest
480 - GT -> rest
481 -
482 --minView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
483 -+minView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
484 - minView E = fail "LazyPairingHeap.minView: empty heap"
485 - minView (H1 x xs) = return (x,xs)
486 - minView (H2 x h xs) = return (x,union h xs)
487 -@@ -369,7 +370,7 @@ minElem E = error "LazyPairingHeap.minElem: empty heap"
488 - minElem (H1 x _) = x
489 - minElem (H2 x _ _) = x
490 -
491 --maxView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
492 -+maxView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
493 - maxView E = fail "LazyPairingHeap.maxView: empty heap"
494 - maxView xs = return (y,xs')
495 - where (xs', y) = maxView' xs
496 -@@ -474,7 +475,7 @@ deleteMax = deleteMaxUsingMaxView
497 - lookup :: Ord a => a -> Heap a -> a
498 - lookup = lookupUsingLookupAll
499 -
500 --lookupM :: (Ord a, Monad m) => a -> Heap a -> m a
501 -+lookupM :: (Ord a, Fail.MonadFail m) => a -> Heap a -> m a
502 - lookupM = lookupMUsingLookupAll
503 -
504 - lookupWithDefault :: Ord a => a -> a -> Heap a -> a
505 -diff --git a/src/Data/Edison/Coll/LeftistHeap.hs b/src/Data/Edison/Coll/LeftistHeap.hs
506 -index 751394b..10ccf5a 100644
507 ---- a/src/Data/Edison/Coll/LeftistHeap.hs
508 -+++ b/src/Data/Edison/Coll/LeftistHeap.hs
509 -@@ -47,6 +47,7 @@ import Data.Edison.Coll.Defaults
510 - import Data.Monoid
511 - import Data.Semigroup as SG
512 - import Control.Monad
513 -+import qualified Control.Monad.Fail as Fail
514 - import Test.QuickCheck
515 -
516 - moduleName :: String
517 -@@ -173,7 +174,7 @@ toSeq h = tol h S.empty
518 - where tol E rest = rest
519 - tol (L _ x a b) rest = S.lcons x (tol b (tol a rest))
520 -
521 --lookupM :: (Ord a, Monad m) => a -> Heap a -> m a
522 -+lookupM :: (Ord a, Fail.MonadFail m) => a -> Heap a -> m a
523 - lookupM _ E = fail "LeftistHeap.lookupM: XXX"
524 - lookupM x (L _ y a b) =
525 - case compare x y of
526 -@@ -299,7 +300,7 @@ partitionLT_GT y h = (h', C.unionList hs)
527 - (b', hs'') = collect b hs'
528 - in (node x a' b', hs'')
529 -
530 --minView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
531 -+minView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
532 - minView E = fail "LeftistHeap.minView: empty collection"
533 - minView (L _ x a b) = return (x, union a b)
534 -
535 -@@ -307,7 +308,7 @@ minElem :: Ord a => Heap a -> a
536 - minElem E = error "LeftistHeap.minElem: empty collection"
537 - minElem (L _ x _ _) = x
538 -
539 --maxView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
540 -+maxView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
541 - maxView E = fail "LeftistHeap.maxView: empty collection"
542 - maxView (L _ x E _) = return (x, E)
543 - maxView (L _ x a E) = return (y, L 1 x a' E)
544 -diff --git a/src/Data/Edison/Coll/MinHeap.hs b/src/Data/Edison/Coll/MinHeap.hs
545 -index ba38960..94e2f1b 100644
546 ---- a/src/Data/Edison/Coll/MinHeap.hs
547 -+++ b/src/Data/Edison/Coll/MinHeap.hs
548 -@@ -46,6 +46,7 @@ import Data.Edison.Seq.Defaults (tokenMatch,maybeParens)
549 - import Data.Monoid
550 - import qualified Data.Semigroup as SG
551 - import Control.Monad
552 -+import qualified Control.Monad.Fail as Fail
553 - import Test.QuickCheck
554 -
555 - data Min h a = E | M a h deriving (Eq)
556 -@@ -75,7 +76,7 @@ strict :: (C.CollX h a,Ord a) => Min h a -> Min h a
557 -
558 - toSeq :: (C.Coll h a,S.Sequence s) => Min h a -> s a
559 - lookup :: (C.Coll h a,Ord a) => a -> Min h a -> a
560 --lookupM :: (C.Coll h a,Ord a,Monad m) => a -> Min h a -> m a
561 -+lookupM :: (C.Coll h a, Ord a, Fail.MonadFail m) => a -> Min h a -> m a
562 - lookupAll :: (C.Coll h a,Ord a,S.Sequence s) => a -> Min h a -> s a
563 - lookupWithDefault :: (C.Coll h a,Ord a) => a -> a -> Min h a -> a
564 - fold :: (C.Coll h a) => (a -> b -> b) -> b -> Min h a -> b
565 -@@ -100,9 +101,9 @@ partitionLT_GE :: (C.OrdColl h a,Ord a) => a -> Min h a -> (Min h a, Min h a)
566 - partitionLE_GT :: (C.OrdColl h a,Ord a) => a -> Min h a -> (Min h a, Min h a)
567 - partitionLT_GT :: (C.OrdColl h a,Ord a) => a -> Min h a -> (Min h a, Min h a)
568 -
569 --minView :: (C.OrdColl h a,Ord a,Monad m) => Min h a -> m (a, Min h a)
570 -+minView :: (C.OrdColl h a, Ord a, Fail.MonadFail m) => Min h a -> m (a, Min h a)
571 - minElem :: (C.OrdColl h a,Ord a) => Min h a -> a
572 --maxView :: (C.OrdColl h a,Ord a,Monad m) => Min h a -> m (a, Min h a)
573 -+maxView :: (C.OrdColl h a, Ord a, Fail.MonadFail m) => Min h a -> m (a, Min h a)
574 - maxElem :: (C.OrdColl h a,Ord a) => Min h a -> a
575 - foldr :: (C.OrdColl h a,Ord a) => (a -> b -> b) -> b -> Min h a -> b
576 - foldl :: (C.OrdColl h a,Ord a) => (b -> a -> b) -> b -> Min h a -> b
577 -diff --git a/src/Data/Edison/Coll/SkewHeap.hs b/src/Data/Edison/Coll/SkewHeap.hs
578 -index 1a05ebe..e55ba58 100644
579 ---- a/src/Data/Edison/Coll/SkewHeap.hs
580 -+++ b/src/Data/Edison/Coll/SkewHeap.hs
581 -@@ -47,6 +47,7 @@ import Data.Edison.Coll.Defaults
582 - import Data.Monoid
583 - import Data.Semigroup as SG
584 - import Control.Monad
585 -+import qualified Control.Monad.Fail as Fail
586 -
587 - import Test.QuickCheck
588 -
589 -@@ -142,7 +143,7 @@ toSeq h = tol h S.empty
590 - where tol E rest = rest
591 - tol (T x a b) rest = S.lcons x (tol b (tol a rest))
592 -
593 --lookupM :: (Ord a, Monad m) => a -> Heap a -> m a
594 -+lookupM :: (Ord a, Fail.MonadFail m) => a -> Heap a -> m a
595 - lookupM _ E = fail "SkewHeap.lookupM: XXX"
596 - lookupM x (T y a b) =
597 - case compare x y of
598 -@@ -267,7 +268,7 @@ partitionLT_GT y h = (h', C.unionList hs)
599 - (b', hs'') = collect b hs'
600 - in (T x a' b', hs'')
601 -
602 --minView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
603 -+minView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
604 - minView E = fail "SkewHeap.minView: empty heap"
605 - minView (T x a b) = return (x, union a b)
606 -
607 -@@ -275,7 +276,7 @@ minElem :: Ord a => Heap a -> a
608 - minElem E = error "SkewHeap.minElem: empty collection"
609 - minElem (T x _ _) = x
610 -
611 --maxView :: (Ord a, Monad m) => Heap a -> m (a, Heap a)
612 -+maxView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
613 - maxView E = fail "SkewHeap.maxView: empty heap"
614 - maxView (T x E E) = return (x, E)
615 - maxView (T x a E) = return (y, T x a' E)
616 -diff --git a/src/Data/Edison/Coll/SplayHeap.hs b/src/Data/Edison/Coll/SplayHeap.hs
617 -index 4e3b061..6c950b7 100644
618 ---- a/src/Data/Edison/Coll/SplayHeap.hs
619 -+++ b/src/Data/Edison/Coll/SplayHeap.hs
620 -@@ -50,6 +50,7 @@ import Data.Edison.Coll.Defaults
621 - import Data.Monoid
622 - import Data.Semigroup as SG
623 - import Control.Monad
624 -+import qualified Control.Monad.Fail as Fail
625 - import Test.QuickCheck
626 -
627 - moduleName :: String
628 -@@ -93,7 +94,7 @@ strict :: Heap a -> Heap a
629 -
630 - toSeq :: (Ord a, S.Sequence s) => Heap a -> s a
631 - lookup :: Ord a => a -> Heap a -> a
632 --lookupM :: (Ord a,Monad m) => a -> Heap a -> m a
633 -+lookupM :: (Ord a, Fail.MonadFail m) => a -> Heap a -> m a
634 - lookupAll :: (Ord a,S.Sequence s) => a -> Heap a -> s a
635 - lookupWithDefault :: Ord a => a -> a -> Heap a -> a
636 - fold :: Ord a => (a -> b -> b) -> b -> Heap a -> b
637 -@@ -118,9 +119,9 @@ partitionLT_GE :: Ord a => a -> Heap a -> (Heap a, Heap a)
638 - partitionLE_GT :: Ord a => a -> Heap a -> (Heap a, Heap a)
639 - partitionLT_GT :: Ord a => a -> Heap a -> (Heap a, Heap a)
640 -
641 --minView :: (Ord a,Monad m) => Heap a -> m (a, Heap a)
642 -+minView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
643 - minElem :: Ord a => Heap a -> a
644 --maxView :: (Ord a,Monad m) => Heap a -> m (a, Heap a)
645 -+maxView :: (Ord a, Fail.MonadFail m) => Heap a -> m (a, Heap a)
646 - maxElem :: Ord a => Heap a -> a
647 - foldr :: Ord a => (a -> b -> b) -> b -> Heap a -> b
648 - foldl :: Ord a => (b -> a -> b) -> b -> Heap a -> b
649 -diff --git a/src/Data/Edison/Coll/StandardSet.hs b/src/Data/Edison/Coll/StandardSet.hs
650 -index fcaf715..56df4bf 100644
651 ---- a/src/Data/Edison/Coll/StandardSet.hs
652 -+++ b/src/Data/Edison/Coll/StandardSet.hs
653 -@@ -43,6 +43,7 @@ module Data.Edison.Coll.StandardSet (
654 -
655 - import Prelude hiding (null,foldr,foldl,foldr1,foldl1,lookup,filter)
656 - import qualified Prelude
657 -+import qualified Control.Monad.Fail as Fail
658 - import qualified Data.List
659 -
660 - import qualified Data.Edison.Coll as C
661 -@@ -73,7 +74,7 @@ strict :: Ord a => Set a -> Set a
662 -
663 - toSeq :: (Ord a,S.Sequence seq) => Set a -> seq a
664 - lookup :: Ord a => a -> Set a -> a
665 --lookupM :: (Ord a,Monad m) => a -> Set a -> m a
666 -+lookupM :: (Ord a, Monad m, Fail.MonadFail m) => a -> Set a -> m a
667 - lookupAll :: (Ord a,S.Sequence seq) => a -> Set a -> seq a
668 - lookupWithDefault :: Ord a => a -> a -> Set a -> a
669 - fold :: (a -> b -> b) -> b -> Set a -> b
670 -@@ -98,9 +99,9 @@ partitionLT_GE :: Ord a => a -> Set a -> (Set a, Set a)
671 - partitionLE_GT :: Ord a => a -> Set a -> (Set a, Set a)
672 - partitionLT_GT :: Ord a => a -> Set a -> (Set a, Set a)
673 -
674 --minView :: (Ord a,Monad m) => Set a -> m (a, Set a)
675 -+minView :: (Ord a, Monad m, Fail.MonadFail m) => Set a -> m (a, Set a)
676 - minElem :: Set a -> a
677 --maxView :: (Ord a,Monad m) => Set a -> m (a, Set a)
678 -+maxView :: (Ord a, Monad m, Fail.MonadFail m) => Set a -> m (a, Set a)
679 - maxElem :: Set a -> a
680 - foldr :: (a -> b -> b) -> b -> Set a -> b
681 - foldl :: (b -> a -> b) -> b -> Set a -> b
682 -diff --git a/src/Data/Edison/Coll/UnbalancedSet.hs b/src/Data/Edison/Coll/UnbalancedSet.hs
683 -index 03cb856..d7975d0 100644
684 ---- a/src/Data/Edison/Coll/UnbalancedSet.hs
685 -+++ b/src/Data/Edison/Coll/UnbalancedSet.hs
686 -@@ -43,6 +43,7 @@ module Data.Edison.Coll.UnbalancedSet (
687 -
688 - import Prelude hiding (null,foldr,foldl,foldr1,foldl1,lookup,filter)
689 - import qualified Prelude
690 -+import qualified Control.Monad.Fail as Fail
691 - import qualified Data.Edison.Coll as C
692 - import qualified Data.Edison.Seq as S
693 - import Data.Edison.Coll.Defaults
694 -@@ -70,7 +71,7 @@ strict :: Set a -> Set a
695 -
696 - toSeq :: (Ord a,S.Sequence seq) => Set a -> seq a
697 - lookup :: Ord a => a -> Set a -> a
698 --lookupM :: (Ord a,Monad m) => a -> Set a -> m a
699 -+lookupM :: (Ord a, Fail.MonadFail m) => a -> Set a -> m a
700 - lookupAll :: (Ord a,S.Sequence seq) => a -> Set a -> seq a
701 - lookupWithDefault :: Ord a => a -> a -> Set a -> a
702 - fold :: (a -> b -> b) -> b -> Set a -> b
703 -@@ -95,9 +96,9 @@ partitionLT_GE :: Ord a => a -> Set a -> (Set a, Set a)
704 - partitionLE_GT :: Ord a => a -> Set a -> (Set a, Set a)
705 - partitionLT_GT :: Ord a => a -> Set a -> (Set a, Set a)
706 -
707 --minView :: (Monad m) => Set a -> m (a, Set a)
708 -+minView :: (Fail.MonadFail m) => Set a -> m (a, Set a)
709 - minElem :: Set a -> a
710 --maxView :: (Monad m) => Set a -> m (a, Set a)
711 -+maxView :: (Fail.MonadFail m) => Set a -> m (a, Set a)
712 - maxElem :: Set a -> a
713 - foldr :: (a -> b -> b) -> b -> Set a -> b
714 - foldl :: (b -> a -> b) -> b -> Set a -> b
715 -diff --git a/src/Data/Edison/Concrete/FingerTree.hs b/src/Data/Edison/Concrete/FingerTree.hs
716 -index 47f766c..c6a2ac0 100644
717 ---- a/src/Data/Edison/Concrete/FingerTree.hs
718 -+++ b/src/Data/Edison/Concrete/FingerTree.hs
719 -@@ -81,6 +81,7 @@ import Test.QuickCheck
720 - import Data.Edison.Prelude
721 -
722 - import Control.Monad (liftM2, liftM3, liftM4)
723 -+import qualified Control.Monad.Fail as Fail
724 -
725 -
726 - infixr 5 `lcons`
727 -@@ -334,7 +335,7 @@ null Empty = True
728 - null _ = False
729 -
730 - -- | /O(1)/. Analyse the left end of a sequence.
731 --lview :: (Measured v a, Monad m) => FingerTree v a -> m (a,FingerTree v a)
732 -+lview :: (Measured v a, Fail.MonadFail m) => FingerTree v a -> m (a,FingerTree v a)
733 - lview Empty = fail "FingerTree.lview: empty tree"
734 - lview (Single x) = return (x, Empty)
735 - lview (Deep _ (One x) m sf) = return . (,) x $
736 -@@ -357,7 +358,7 @@ ltailDigit (Four _ b c d) = Three b c d
737 - ltailDigit _ = error "FingerTree.ltailDigit: bug!"
738 -
739 - -- | /O(1)/. Analyse the right end of a sequence.
740 --rview :: (Measured v a, Monad m) => FingerTree v a -> m (a, FingerTree v a)
741 -+rview :: (Measured v a, Fail.MonadFail m) => FingerTree v a -> m (a, FingerTree v a)
742 - rview Empty = fail "FingerTree.rview: empty tree"
743 - rview (Single x) = return (x, Empty)
744 - rview (Deep _ pr m (One x)) = return . (,) x $
745 -diff --git a/src/Data/Edison/Seq/BankersQueue.hs b/src/Data/Edison/Seq/BankersQueue.hs
746 -index 6dac746..0ab24c9 100644
747 ---- a/src/Data/Edison/Seq/BankersQueue.hs
748 -+++ b/src/Data/Edison/Seq/BankersQueue.hs
749 -@@ -51,11 +51,13 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
750 -
751 - import qualified Control.Applicative as App
752 -
753 -+import Data.Edison.Prelude ( runFail_ )
754 - import qualified Data.Edison.Seq as S ( Sequence(..) )
755 - import Data.Edison.Seq.Defaults
756 - import qualified Data.Edison.Seq.ListSeq as L
757 - import Data.Monoid
758 - import Data.Semigroup as SG
759 -+import qualified Control.Monad.Fail as Fail
760 - import Control.Monad.Identity
761 - import Test.QuickCheck
762 -
763 -@@ -66,16 +68,16 @@ singleton :: a -> Seq a
764 - lcons :: a -> Seq a -> Seq a
765 - rcons :: a -> Seq a -> Seq a
766 - append :: Seq a -> Seq a -> Seq a
767 --lview :: (Monad m) => Seq a -> m (a, Seq a)
768 -+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
769 - lhead :: Seq a -> a
770 --lheadM :: (Monad m) => Seq a -> m a
771 -+lheadM :: (Fail.MonadFail m) => Seq a -> m a
772 - ltail :: Seq a -> Seq a
773 --ltailM :: (Monad m) => Seq a -> m (Seq a)
774 --rview :: (Monad m) => Seq a -> m (a, Seq a)
775 -+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
776 -+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
777 - rhead :: Seq a -> a
778 --rheadM :: (Monad m) => Seq a -> m a
779 -+rheadM :: (Fail.MonadFail m) => Seq a -> m a
780 - rtail :: Seq a -> Seq a
781 --rtailM :: (Monad m) => Seq a -> m (Seq a)
782 -+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
783 - null :: Seq a -> Bool
784 - size :: Seq a -> Int
785 - concat :: Seq (Seq a) -> Seq a
786 -@@ -106,7 +108,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
787 - copy :: Int -> a -> Seq a
788 - inBounds :: Int -> Seq a -> Bool
789 - lookup :: Int -> Seq a -> a
790 --lookupM :: (Monad m) => Int -> Seq a -> m a
791 -+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
792 - lookupWithDefault :: a -> Int -> Seq a -> a
793 - update :: Int -> a -> Seq a -> Seq a
794 - adjust :: (a -> a) -> Int -> Seq a -> Seq a
795 -@@ -263,7 +265,7 @@ copy n x
796 -
797 - -- reduce1: given sizes could do more effective job of dividing evenly!
798 -
799 --lookup idx q = runIdentity (lookupM idx q)
800 -+lookup idx q = runFail_ (lookupM idx q)
801 -
802 - lookupM idx (Q i xs ys j)
803 - | idx < i = L.lookupM idx xs
804 -diff --git a/src/Data/Edison/Seq/BinaryRandList.hs b/src/Data/Edison/Seq/BinaryRandList.hs
805 -index b01b9b8..e772b65 100644
806 ---- a/src/Data/Edison/Seq/BinaryRandList.hs
807 -+++ b/src/Data/Edison/Seq/BinaryRandList.hs
808 -@@ -55,14 +55,15 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
809 - zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
810 -
811 - import qualified Control.Applicative as App
812 --import Control.Monad.Identity
813 - import Data.Maybe
814 -
815 -+import Data.Edison.Prelude ( runFail_ )
816 - import qualified Data.Edison.Seq as S ( Sequence(..) )
817 - import Data.Edison.Seq.Defaults
818 - import Data.Monoid
819 - import Data.Semigroup as SG
820 - import Control.Monad
821 -+import qualified Control.Monad.Fail as Fail
822 - import Test.QuickCheck
823 -
824 - -- signatures for exported functions
825 -@@ -72,16 +73,16 @@ singleton :: a -> Seq a
826 - lcons :: a -> Seq a -> Seq a
827 - rcons :: a -> Seq a -> Seq a
828 - append :: Seq a -> Seq a -> Seq a
829 --lview :: (Monad m) => Seq a -> m (a, Seq a)
830 -+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
831 - lhead :: Seq a -> a
832 --lheadM :: (Monad m) => Seq a -> m a
833 -+lheadM :: (Fail.MonadFail m) => Seq a -> m a
834 - ltail :: Seq a -> Seq a
835 --ltailM :: (Monad m) => Seq a -> m (Seq a)
836 --rview :: (Monad m) => Seq a -> m (a, Seq a)
837 -+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
838 -+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
839 - rhead :: Seq a -> a
840 --rheadM :: (Monad m) => Seq a -> m a
841 -+rheadM :: (Fail.MonadFail m) => Seq a -> m a
842 - rtail :: Seq a -> Seq a
843 --rtailM :: (Monad m) => Seq a -> m (Seq a)
844 -+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
845 - null :: Seq a -> Bool
846 - size :: Seq a -> Int
847 - concat :: Seq (Seq a) -> Seq a
848 -@@ -112,7 +113,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
849 - copy :: Int -> a -> Seq a
850 - inBounds :: Int -> Seq a -> Bool
851 - lookup :: Int -> Seq a -> a
852 --lookupM :: (Monad m) => Int -> Seq a -> m a
853 -+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
854 - lookupWithDefault :: a -> Int -> Seq a -> a
855 - update :: Int -> a -> Seq a -> Seq a
856 - adjust :: (a -> a) -> Int -> Seq a -> Seq a
857 -@@ -267,7 +268,7 @@ inBounds i xs = (i >= 0) && inb xs i
858 - inb (Even ps) i = inb ps (half i)
859 - inb (Odd _ ps) i = (i == 0) || inb ps (half (i-1))
860 -
861 --lookup i xs = runIdentity (lookupM i xs)
862 -+lookup i xs = runFail_ (lookupM i xs)
863 -
864 - lookupM i xs
865 - | i < 0 = fail "BinaryRandList.lookup: bad subscript"
866 -diff --git a/src/Data/Edison/Seq/BraunSeq.hs b/src/Data/Edison/Seq/BraunSeq.hs
867 -index 7f6f33b..11236e3 100644
868 ---- a/src/Data/Edison/Seq/BraunSeq.hs
869 -+++ b/src/Data/Edison/Seq/BraunSeq.hs
870 -@@ -72,6 +72,7 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
871 - zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
872 -
873 - import qualified Control.Applicative as App
874 -+import qualified Control.Monad.Fail as Fail
875 - import Control.Monad.Identity
876 - import Data.Maybe
877 - import Data.Monoid
878 -@@ -79,6 +80,7 @@ import Data.Semigroup as SG
879 - import Test.QuickCheck
880 -
881 -
882 -+import Data.Edison.Prelude ( runFail_ )
883 - import qualified Data.Edison.Seq as S ( Sequence(..) )
884 - import Data.Edison.Seq.Defaults
885 - import qualified Data.Edison.Seq.ListSeq as L
886 -@@ -91,16 +93,16 @@ singleton :: a -> Seq a
887 - lcons :: a -> Seq a -> Seq a
888 - rcons :: a -> Seq a -> Seq a
889 - append :: Seq a -> Seq a -> Seq a
890 --lview :: (Monad m) => Seq a -> m (a, Seq a)
891 -+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
892 - lhead :: Seq a -> a
893 --lheadM :: (Monad m) => Seq a -> m a
894 -+lheadM :: (Fail.MonadFail m) => Seq a -> m a
895 - ltail :: Seq a -> Seq a
896 --ltailM :: (Monad m) => Seq a -> m (Seq a)
897 --rview :: (Monad m) => Seq a -> m (a, Seq a)
898 -+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
899 -+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
900 - rhead :: Seq a -> a
901 --rheadM :: (Monad m) => Seq a -> m a
902 -+rheadM :: (Fail.MonadFail m) => Seq a -> m a
903 - rtail :: Seq a -> Seq a
904 --rtailM :: (Monad m) => Seq a -> m (Seq a)
905 -+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
906 - null :: Seq a -> Bool
907 - size :: Seq a -> Int
908 - concat :: Seq (Seq a) -> Seq a
909 -@@ -131,7 +133,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
910 - copy :: Int -> a -> Seq a
911 - inBounds :: Int -> Seq a -> Bool
912 - lookup :: Int -> Seq a -> a
913 --lookupM :: (Monad m) => Int -> Seq a -> m a
914 -+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
915 - lookupWithDefault :: a -> Int -> Seq a -> a
916 - update :: Int -> a -> Seq a -> Seq a
917 - adjust :: (a -> a) -> Int -> Seq a -> Seq a
918 -@@ -344,7 +346,7 @@ inBounds i xs = (i >= 0) && inb xs i
919 - | i == 0 = True
920 - | otherwise = inb b (half i - 1)
921 -
922 --lookup i xs = runIdentity (lookupM i xs)
923 -+lookup i xs = runFail_ (lookupM i xs)
924 -
925 - lookupM i xs
926 - | i < 0 = fail "BraunSeq.lookupM: bad subscript"
927 -diff --git a/src/Data/Edison/Seq/Defaults.hs b/src/Data/Edison/Seq/Defaults.hs
928 -index ed593dc..eae6a09 100644
929 ---- a/src/Data/Edison/Seq/Defaults.hs
930 -+++ b/src/Data/Edison/Seq/Defaults.hs
931 -@@ -17,9 +17,11 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
932 - filter,takeWhile,dropWhile,lookup,take,drop,splitAt,
933 - zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
934 -
935 -+import qualified Control.Monad.Fail as Fail
936 - import Control.Monad.Identity
937 - import Data.Char (isSpace)
938 -
939 -+import Data.Edison.Prelude ( runFail_ )
940 - import Data.Edison.Seq
941 - import qualified Data.Edison.Seq.ListSeq as L
942 -
943 -@@ -33,7 +35,7 @@ appendUsingFoldr :: Sequence s => s a -> s a -> s a
944 - appendUsingFoldr s t | null t = s
945 - | otherwise = foldr lcons t s
946 -
947 --rviewDefault :: (Monad m, Sequence s) => s a -> m (a, s a)
948 -+rviewDefault :: (Fail.MonadFail m, Sequence s) => s a -> m (a, s a)
949 - rviewDefault xs
950 - | null xs = fail $ instanceName xs ++ ".rview: empty sequence"
951 - | otherwise = return (rhead xs, rtail xs)
952 -@@ -49,7 +51,7 @@ rtailUsingLview xs =
953 - Nothing -> empty
954 - Just (y, ys) -> lcons x (rt y ys)
955 -
956 --rtailMUsingLview :: (Monad m,Sequence s) => s a -> m (s a)
957 -+rtailMUsingLview :: (Fail.MonadFail m, Sequence s) => s a -> m (s a)
958 - rtailMUsingLview xs =
959 - case lview xs of
960 - Nothing -> fail $ instanceName xs ++ ".rtailM: empty sequence"
961 -@@ -200,7 +202,7 @@ inBoundsUsingSize :: Sequence s => Int -> s a -> Bool
962 - inBoundsUsingSize i s = i >= 0 && i < size s
963 -
964 - lookupUsingLookupM :: Sequence s => Int -> s a -> a
965 --lookupUsingLookupM i s = runIdentity (lookupM i s)
966 -+lookupUsingLookupM i s = runFail_ (lookupM i s)
967 -
968 - lookupUsingDrop :: Sequence s => Int -> s a -> a
969 - lookupUsingDrop i s
970 -@@ -220,7 +222,7 @@ lookupWithDefaultUsingDrop d i s
971 - | otherwise = lhead s'
972 - where s' = drop i s
973 -
974 --lookupMUsingDrop :: (Monad m, Sequence s) => Int -> s a -> m a
975 -+lookupMUsingDrop :: (Fail.MonadFail m, Sequence s) => Int -> s a -> m a
976 - lookupMUsingDrop i s
977 - -- XXX better error message!
978 - | i < 0 || null s' = fail $ instanceName s
979 -diff --git a/src/Data/Edison/Seq/FingerSeq.hs b/src/Data/Edison/Seq/FingerSeq.hs
980 -index c74c70b..a34254c 100644
981 ---- a/src/Data/Edison/Seq/FingerSeq.hs
982 -+++ b/src/Data/Edison/Seq/FingerSeq.hs
983 -@@ -37,9 +37,10 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
984 - zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
985 -
986 - import qualified Control.Applicative as App
987 --import Data.Edison.Prelude (measure, Measured())
988 -+import Data.Edison.Prelude (measure, Measured(), runFail_)
989 - import qualified Data.Edison.Seq as S
990 - import Data.Edison.Seq.Defaults
991 -+import qualified Control.Monad.Fail as Fail
992 - import Control.Monad.Identity
993 - import Data.Monoid
994 - import Data.Semigroup as SG
995 -@@ -87,16 +88,16 @@ singleton :: a -> Seq a
996 - lcons :: a -> Seq a -> Seq a
997 - rcons :: a -> Seq a -> Seq a
998 - append :: Seq a -> Seq a -> Seq a
999 --lview :: (Monad m) => Seq a -> m (a, Seq a)
1000 -+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
1001 - lhead :: Seq a -> a
1002 --lheadM :: (Monad m) => Seq a -> m a
1003 -+lheadM :: (Fail.MonadFail m) => Seq a -> m a
1004 - ltail :: Seq a -> Seq a
1005 --ltailM :: (Monad m) => Seq a -> m (Seq a)
1006 --rview :: (Monad m) => Seq a -> m (a, Seq a)
1007 -+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
1008 -+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
1009 - rhead :: Seq a -> a
1010 --rheadM :: (Monad m) => Seq a -> m a
1011 -+rheadM :: (Fail.MonadFail m) => Seq a -> m a
1012 - rtail :: Seq a -> Seq a
1013 --rtailM :: (Monad m) => Seq a -> m (Seq a)
1014 -+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
1015 - null :: Seq a -> Bool
1016 - size :: Seq a -> Int
1017 - concat :: Seq (Seq a) -> Seq a
1018 -@@ -127,7 +128,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
1019 - copy :: Int -> a -> Seq a
1020 - inBounds :: Int -> Seq a -> Bool
1021 - lookup :: Int -> Seq a -> a
1022 --lookupM :: (Monad m) => Int -> Seq a -> m a
1023 -+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
1024 - lookupWithDefault :: a -> Int -> Seq a -> a
1025 - update :: Int -> a -> Seq a -> Seq a
1026 - adjust :: (a -> a) -> Int -> Seq a -> Seq a
1027 -@@ -206,10 +207,10 @@ lheadM xs = lview xs >>= return . fst
1028 - ltailM xs = lview xs >>= return . snd
1029 - rheadM xs = rview xs >>= return . fst
1030 - rtailM xs = rview xs >>= return . snd
1031 --lhead = runIdentity . lheadM
1032 --ltail = runIdentity . ltailM
1033 --rhead = runIdentity . rheadM
1034 --rtail = runIdentity . rtailM
1035 -+lhead = runFail_ . lheadM
1036 -+ltail = runFail_ . ltailM
1037 -+rhead = runFail_ . rheadM
1038 -+rtail = runFail_ . rtailM
1039 -
1040 - fold = foldr
1041 - fold' = foldr'
1042 -diff --git a/src/Data/Edison/Seq/JoinList.hs b/src/Data/Edison/Seq/JoinList.hs
1043 -index 6922023..05855ba 100644
1044 ---- a/src/Data/Edison/Seq/JoinList.hs
1045 -+++ b/src/Data/Edison/Seq/JoinList.hs
1046 -@@ -57,6 +57,7 @@ import qualified Control.Applicative as App
1047 -
1048 - import Data.Edison.Seq.Defaults
1049 - import Control.Monad
1050 -+import qualified Control.Monad.Fail as Fail
1051 - import Data.Monoid
1052 - import Data.Semigroup as SG
1053 - import Test.QuickCheck
1054 -@@ -68,16 +69,16 @@ singleton :: a -> Seq a
1055 - lcons :: a -> Seq a -> Seq a
1056 - rcons :: a -> Seq a -> Seq a
1057 - append :: Seq a -> Seq a -> Seq a
1058 --lview :: (Monad m) => Seq a -> m (a, Seq a)
1059 -+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
1060 - lhead :: Seq a -> a
1061 --lheadM :: (Monad m) => Seq a -> m a
1062 -+lheadM :: (Fail.MonadFail m) => Seq a -> m a
1063 - ltail :: Seq a -> Seq a
1064 --ltailM :: (Monad m) => Seq a -> m (Seq a)
1065 --rview :: (Monad m) => Seq a -> m (a, Seq a)
1066 -+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
1067 -+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
1068 - rhead :: Seq a -> a
1069 --rheadM :: (Monad m) => Seq a -> m a
1070 -+rheadM :: (Fail.MonadFail m) => Seq a -> m a
1071 - rtail :: Seq a -> Seq a
1072 --rtailM :: (Monad m) => Seq a -> m (Seq a)
1073 -+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
1074 - null :: Seq a -> Bool
1075 - size :: Seq a -> Int
1076 - concat :: Seq (Seq a) -> Seq a
1077 -@@ -108,7 +109,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
1078 - copy :: Int -> a -> Seq a
1079 - inBounds :: Int -> Seq a -> Bool
1080 - lookup :: Int -> Seq a -> a
1081 --lookupM :: (Monad m) => Int -> Seq a -> m a
1082 -+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
1083 - lookupWithDefault :: a -> Int -> Seq a -> a
1084 - update :: Int -> a -> Seq a -> Seq a
1085 - adjust :: (a -> a) -> Int -> Seq a -> Seq a
1086 -diff --git a/src/Data/Edison/Seq/MyersStack.hs b/src/Data/Edison/Seq/MyersStack.hs
1087 -index 30eb197..eca46a5 100644
1088 ---- a/src/Data/Edison/Seq/MyersStack.hs
1089 -+++ b/src/Data/Edison/Seq/MyersStack.hs
1090 -@@ -49,8 +49,10 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
1091 - zip,zip3,zipWith,zipWith3,unzip,unzip3,null)
1092 -
1093 - import qualified Control.Applicative as App
1094 -+import Data.Edison.Prelude ( runFail_ )
1095 - import qualified Data.Edison.Seq as S ( Sequence(..) )
1096 - import Data.Edison.Seq.Defaults
1097 -+import qualified Control.Monad.Fail as Fail
1098 - import Control.Monad.Identity
1099 - import Data.Monoid
1100 - import Data.Semigroup as SG
1101 -@@ -63,16 +65,16 @@ singleton :: a -> Seq a
1102 - lcons :: a -> Seq a -> Seq a
1103 - rcons :: a -> Seq a -> Seq a
1104 - append :: Seq a -> Seq a -> Seq a
1105 --lview :: (Monad m) => Seq a -> m (a, Seq a)
1106 -+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
1107 - lhead :: Seq a -> a
1108 --lheadM :: (Monad m) => Seq a -> m a
1109 -+lheadM :: (Fail.MonadFail m) => Seq a -> m a
1110 - ltail :: Seq a -> Seq a
1111 --ltailM :: (Monad m) => Seq a -> m (Seq a)
1112 --rview :: (Monad m) => Seq a -> m (a, Seq a)
1113 -+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
1114 -+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
1115 - rhead :: Seq a -> a
1116 --rheadM :: (Monad m) => Seq a -> m a
1117 -+rheadM :: (Fail.MonadFail m) => Seq a -> m a
1118 - rtail :: Seq a -> Seq a
1119 --rtailM :: (Monad m) => Seq a -> m (Seq a)
1120 -+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
1121 - null :: Seq a -> Bool
1122 - size :: Seq a -> Int
1123 - concat :: Seq (Seq a) -> Seq a
1124 -@@ -103,7 +105,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
1125 - copy :: Int -> a -> Seq a
1126 - inBounds :: Int -> Seq a -> Bool
1127 - lookup :: Int -> Seq a -> a
1128 --lookupM :: (Monad m) => Int -> Seq a -> m a
1129 -+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
1130 - lookupWithDefault :: a -> Int -> Seq a -> a
1131 - update :: Int -> a -> Seq a -> Seq a
1132 - adjust :: (a -> a) -> Int -> Seq a -> Seq a
1133 -@@ -246,7 +248,7 @@ inBounds i xs = inb xs i
1134 - | i < j = (i >= 0)
1135 - | otherwise = inb xs' (i - j)
1136 -
1137 --lookup i xs = runIdentity (lookupM i xs)
1138 -+lookup i xs = runFail_ (lookupM i xs)
1139 -
1140 - lookupM i xs = look xs i
1141 - where look E _ = fail "MyersStack.lookup: bad subscript"
1142 -diff --git a/src/Data/Edison/Seq/RandList.hs b/src/Data/Edison/Seq/RandList.hs
1143 -index 8fe97bd..8d2d38b 100644
1144 ---- a/src/Data/Edison/Seq/RandList.hs
1145 -+++ b/src/Data/Edison/Seq/RandList.hs
1146 -@@ -55,8 +55,10 @@ import Prelude hiding (concat,reverse,map,concatMap,foldr,foldl,foldr1,foldl1,
1147 -
1148 - import qualified Control.Applicative as App
1149 -
1150 -+import Data.Edison.Prelude ( runFail_ )
1151 - import qualified Data.Edison.Seq as S( Sequence(..) )
1152 - import Data.Edison.Seq.Defaults
1153 -+import qualified Control.Monad.Fail as Fail
1154 - import Control.Monad.Identity
1155 - import Data.Monoid
1156 - import Data.Semigroup as SG
1157 -@@ -69,16 +71,16 @@ singleton :: a -> Seq a
1158 - lcons :: a -> Seq a -> Seq a
1159 - rcons :: a -> Seq a -> Seq a
1160 - append :: Seq a -> Seq a -> Seq a
1161 --lview :: (Monad m) => Seq a -> m (a, Seq a)
1162 -+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
1163 - lhead :: Seq a -> a
1164 --lheadM :: (Monad m) => Seq a -> m a
1165 -+lheadM :: (Fail.MonadFail m) => Seq a -> m a
1166 - ltail :: Seq a -> Seq a
1167 --ltailM :: (Monad m) => Seq a -> m (Seq a)
1168 --rview :: (Monad m) => Seq a -> m (a, Seq a)
1169 -+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
1170 -+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
1171 - rhead :: Seq a -> a
1172 --rheadM :: (Monad m) => Seq a -> m a
1173 -+rheadM :: (Fail.MonadFail m) => Seq a -> m a
1174 - rtail :: Seq a -> Seq a
1175 --rtailM :: (Monad m) => Seq a -> m (Seq a)
1176 -+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
1177 - null :: Seq a -> Bool
1178 - size :: Seq a -> Int
1179 - concat :: Seq (Seq a) -> Seq a
1180 -@@ -109,7 +111,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
1181 - copy :: Int -> a -> Seq a
1182 - inBounds :: Int -> Seq a -> Bool
1183 - lookup :: Int -> Seq a -> a
1184 --lookupM :: (Monad m) => Int -> Seq a -> m a
1185 -+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
1186 - lookupWithDefault :: a -> Int -> Seq a -> a
1187 - update :: Int -> a -> Seq a -> Seq a
1188 - adjust :: (a -> a) -> Int -> Seq a -> Seq a
1189 -@@ -269,7 +271,7 @@ inBounds i xs = inb xs i
1190 - | i < j = (i >= 0)
1191 - | otherwise = inb xs (i - j)
1192 -
1193 --lookup i xs = runIdentity (lookupM i xs)
1194 -+lookup i xs = runFail_ (lookupM i xs)
1195 -
1196 - lookupM i xs = look xs i
1197 - where look E _ = fail "RandList.lookup bad subscript"
1198 -diff --git a/src/Data/Edison/Seq/RevSeq.hs b/src/Data/Edison/Seq/RevSeq.hs
1199 -index 3652c7b..87deea6 100644
1200 ---- a/src/Data/Edison/Seq/RevSeq.hs
1201 -+++ b/src/Data/Edison/Seq/RevSeq.hs
1202 -@@ -62,6 +62,7 @@ import qualified Data.Edison.Seq as S
1203 - import qualified Data.Edison.Seq.ListSeq as L
1204 - import Data.Edison.Seq.Defaults -- only used by concatMap
1205 - import Control.Monad
1206 -+import qualified Control.Monad.Fail as Fail
1207 - import Data.Monoid
1208 - import Data.Semigroup as SG
1209 - import Test.QuickCheck
1210 -@@ -75,16 +76,16 @@ singleton :: S.Sequence s => a -> Rev s a
1211 - lcons :: S.Sequence s => a -> Rev s a -> Rev s a
1212 - rcons :: S.Sequence s => a -> Rev s a -> Rev s a
1213 - append :: S.Sequence s => Rev s a -> Rev s a -> Rev s a
1214 --lview :: (S.Sequence s, Monad m) => Rev s a -> m (a, Rev s a)
1215 -+lview :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m (a, Rev s a)
1216 - lhead :: S.Sequence s => Rev s a -> a
1217 --lheadM :: (S.Sequence s, Monad m) => Rev s a -> m a
1218 -+lheadM :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m a
1219 - ltail :: S.Sequence s => Rev s a -> Rev s a
1220 --ltailM :: (S.Sequence s, Monad m) => Rev s a -> m (Rev s a)
1221 --rview :: (S.Sequence s, Monad m) => Rev s a -> m (a, Rev s a)
1222 -+ltailM :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m (Rev s a)
1223 -+rview :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m (a, Rev s a)
1224 - rhead :: S.Sequence s => Rev s a -> a
1225 --rheadM :: (S.Sequence s, Monad m) => Rev s a -> m a
1226 -+rheadM :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m a
1227 - rtail :: S.Sequence s => Rev s a -> Rev s a
1228 --rtailM :: (S.Sequence s, Monad m) => Rev s a -> m (Rev s a)
1229 -+rtailM :: (S.Sequence s, Fail.MonadFail m) => Rev s a -> m (Rev s a)
1230 - null :: S.Sequence s => Rev s a -> Bool
1231 - size :: S.Sequence s => Rev s a -> Int
1232 - concat :: S.Sequence s => Rev s (Rev s a) -> Rev s a
1233 -@@ -115,7 +116,7 @@ reduce1' :: S.Sequence s => (a -> a -> a) -> Rev s a -> a
1234 - copy :: S.Sequence s => Int -> a -> Rev s a
1235 - inBounds :: S.Sequence s => Int -> Rev s a -> Bool
1236 - lookup :: S.Sequence s => Int -> Rev s a -> a
1237 --lookupM :: (S.Sequence s, Monad m) => Int -> Rev s a -> m a
1238 -+lookupM :: (S.Sequence s, Fail.MonadFail m) => Int -> Rev s a -> m a
1239 - lookupWithDefault :: S.Sequence s => a -> Int -> Rev s a -> a
1240 - update :: S.Sequence s => Int -> a -> Rev s a -> Rev s a
1241 - adjust :: S.Sequence s => (a -> a) -> Int -> Rev s a -> Rev s a
1242 -diff --git a/src/Data/Edison/Seq/SimpleQueue.hs b/src/Data/Edison/Seq/SimpleQueue.hs
1243 -index 64592b6..754108f 100644
1244 ---- a/src/Data/Edison/Seq/SimpleQueue.hs
1245 -+++ b/src/Data/Edison/Seq/SimpleQueue.hs
1246 -@@ -59,6 +59,7 @@ import qualified Data.Edison.Seq.ListSeq as L
1247 - import Data.Monoid
1248 - import Data.Semigroup as SG
1249 - import Control.Monad
1250 -+import qualified Control.Monad.Fail as Fail
1251 - import Test.QuickCheck
1252 -
1253 - -- signatures for exported functions
1254 -@@ -68,16 +69,16 @@ singleton :: a -> Seq a
1255 - lcons :: a -> Seq a -> Seq a
1256 - rcons :: a -> Seq a -> Seq a
1257 - append :: Seq a -> Seq a -> Seq a
1258 --lview :: (Monad m) => Seq a -> m (a, Seq a)
1259 -+lview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
1260 - lhead :: Seq a -> a
1261 --lheadM :: (Monad m) => Seq a -> m a
1262 -+lheadM :: (Fail.MonadFail m) => Seq a -> m a
1263 - ltail :: Seq a -> Seq a
1264 --ltailM :: (Monad m) => Seq a -> m (Seq a)
1265 --rview :: (Monad m) => Seq a -> m (a, Seq a)
1266 -+ltailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
1267 -+rview :: (Fail.MonadFail m) => Seq a -> m (a, Seq a)
1268 - rhead :: Seq a -> a
1269 --rheadM :: (Monad m) => Seq a -> m a
1270 -+rheadM :: (Fail.MonadFail m) => Seq a -> m a
1271 - rtail :: Seq a -> Seq a
1272 --rtailM :: (Monad m) => Seq a -> m (Seq a)
1273 -+rtailM :: (Fail.MonadFail m) => Seq a -> m (Seq a)
1274 - null :: Seq a -> Bool
1275 - size :: Seq a -> Int
1276 - concat :: Seq (Seq a) -> Seq a
1277 -@@ -108,7 +109,7 @@ reduce1' :: (a -> a -> a) -> Seq a -> a
1278 - copy :: Int -> a -> Seq a
1279 - inBounds :: Int -> Seq a -> Bool
1280 - lookup :: Int -> Seq a -> a
1281 --lookupM :: (Monad m) => Int -> Seq a -> m a
1282 -+lookupM :: (Fail.MonadFail m) => Int -> Seq a -> m a
1283 - lookupWithDefault :: a -> Int -> Seq a -> a
1284 - update :: Int -> a -> Seq a -> Seq a
1285 - adjust :: (a -> a) -> Int -> Seq a -> Seq a
1286 -diff --git a/src/Data/Edison/Seq/SizedSeq.hs b/src/Data/Edison/Seq/SizedSeq.hs
1287 -index a50b800..65c0ee9 100644
1288 ---- a/src/Data/Edison/Seq/SizedSeq.hs
1289 -+++ b/src/Data/Edison/Seq/SizedSeq.hs
1290 -@@ -54,6 +54,7 @@ import Data.Edison.Seq.Defaults -- only used by concatMap
1291 - import Data.Monoid
1292 - import Data.Semigroup as SG
1293 - import Control.Monad
1294 -+import qualified Control.Monad.Fail as Fail
1295 - import Test.QuickCheck
1296 -
1297 -
1298 -@@ -65,16 +66,16 @@ singleton :: S.Sequence s => a -> Sized s a
1299 - lcons :: S.Sequence s => a -> Sized s a -> Sized s a
1300 - rcons :: S.Sequence s => a -> Sized s a -> Sized s a
1301 - append :: S.Sequence s => Sized s a -> Sized s a -> Sized s a
1302 --lview :: (S.Sequence s, Monad m) => Sized s a -> m (a, Sized s a)
1303 -+lview :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m (a, Sized s a)
1304 - lhead :: S.Sequence s => Sized s a -> a
1305 --lheadM :: (S.Sequence s, Monad m) => Sized s a -> m a
1306 -+lheadM :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m a
1307 - ltail :: S.Sequence s => Sized s a -> Sized s a
1308 --ltailM :: (S.Sequence s, Monad m) => Sized s a -> m (Sized s a)
1309 --rview :: (S.Sequence s, Monad m) => Sized s a -> m (a, Sized s a)
1310 -+ltailM :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m (Sized s a)
1311 -+rview :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m (a, Sized s a)
1312 - rhead :: S.Sequence s => Sized s a -> a
1313 --rheadM :: (S.Sequence s, Monad m) => Sized s a -> m a
1314 -+rheadM :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m a
1315 - rtail :: S.Sequence s => Sized s a -> Sized s a
1316 --rtailM :: (S.Sequence s, Monad m) => Sized s a -> m (Sized s a)
1317 -+rtailM :: (S.Sequence s, Fail.MonadFail m) => Sized s a -> m (Sized s a)
1318 - null :: S.Sequence s => Sized s a -> Bool
1319 - size :: S.Sequence s => Sized s a -> Int
1320 - concat :: S.Sequence s => Sized s (Sized s a) -> Sized s a
1321 -@@ -105,7 +106,7 @@ reduce1' :: S.Sequence s => (a -> a -> a) -> Sized s a -> a
1322 - copy :: S.Sequence s => Int -> a -> Sized s a
1323 - inBounds :: S.Sequence s => Int -> Sized s a -> Bool
1324 - lookup :: S.Sequence s => Int -> Sized s a -> a
1325 --lookupM :: (S.Sequence s, Monad m) => Int -> Sized s a -> m a
1326 -+lookupM :: (S.Sequence s, Fail.MonadFail m) => Int -> Sized s a -> m a
1327 - lookupWithDefault :: S.Sequence s => a -> Int -> Sized s a -> a
1328 - update :: S.Sequence s => Int -> a -> Sized s a -> Sized s a
1329 - adjust :: S.Sequence s => (a -> a) -> Int -> Sized s a -> Sized s a
1330 -