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