on master help sign in
Patches to close #202 #203 #206
commit5d3b6d2d4f9f362153b929a5aba1d95e612a7bcc authorMichael Snoyman <michael@snoyman.com> dateThu 3 Apr 2014, 08:33 (13 years ago) parentb9dfbd4
9 files changed+815−27
Stackage/Config.hs−21 patching/patches/aws-0.8.5.patch+627−6 patching/patches/cereal-conduit-0.7.2.patch+53 patching/patches/diagrams-builder-0.5.0.6.patch+12 patching/patches/esqueleto-1.3.8.patch+12 patching/patches/process-conduit-1.0.0.2.patch+62 patching/patches/stm-conduit-2.3.0.patch+16 patching/patches/temporary-1.2.0.1.patch+12 patching/patches/websockets-0.8.2.0.patch+21
Stackage/Config.hs−21
@@ -356,33 +356,12 @@ defaultStablePackages ghcVer requireHP = unPackageMap $ execWriter $ do
356356 -- https://github.com/fpco/stackage/issues/200
357357 addRange "Michael Snoyman" "hspec" "< 1.9"
358358
359− -- https://github.com/fpco/stackage/issues/202
360− addRange "Michael Snoyman" "case-insensitive" "< 1.2"
361− addRange "Michael Snoyman" "xml-conduit" "< 1.2"
362−
363− -- https://github.com/fpco/stackage/issues/203
364− addRange "Michael Snoyman" "exceptions" "< 0.4"
365−
366359 -- https://github.com/fpco/stackage/issues/204
367360 addRange "Michael Snoyman" "intervals" "< 0.5"
368361
369362 -- https://github.com/fpco/stackage/issues/205
370363 addRange "Michael Snoyman" "hastache" "< 0.6"
371364
372− -- https://github.com/fpco/stackage/issues/206
373− addRange "Michael Snoyman" "conduit" "< 1.1"
374− addRange "Michael Snoyman" "conduit-extra" "< 1.1"
375− addRange "Michael Snoyman" "attoparsec-conduit" "< 1.1"
376− addRange "Michael Snoyman" "resourcet" "< 1.1"
377− addRange "Michael Snoyman" "blaze-builder-conduit" "< 1.1"
378− addRange "Michael Snoyman" "zlib-conduit" "< 1.1"
379− addRange "Michael Snoyman" "network-conduit" "< 1.1"
380− addRange "Michael Snoyman" "network-conduit-tls" "< 1.1"
381− addRange "Michael Snoyman" "http-conduit" "< 2.1"
382− addRange "Michael Snoyman" "http-client" "< 0.3"
383− addRange "Michael Snoyman" "http-client-conduit" "< 0.3"
384− addRange "Michael Snoyman" "http-client-multipart" "< 0.3"
385−
386365 -- https://github.com/ozataman/csv-conduit/issues/10
387366 addRange "Michael Snoyman" "csv-conduit" "< 0.6.2 || > 0.6.2"
388367
patching/patches/aws-0.8.5.patch+627−6
@@ -1,14 +1,635 @@
1+diff -ru orig/Aws/Aws.hs new/Aws/Aws.hs
2+--- orig/Aws/Aws.hs 2014-04-03 08:17:21.058394778 +0300
3++++ new/Aws/Aws.hs 2014-04-03 08:17:20.000000000 +0300
4+@@ -33,7 +33,6 @@
5+ import Control.Monad.IO.Class
6+ import Control.Monad.Trans
7+ import Control.Monad.Trans.Resource
8+-import Data.Attempt (Attempt(Success, Failure))
9+ import qualified Data.ByteString as B
10+ import qualified Data.CaseInsensitive as CI
11+ import qualified Data.Conduit as C
12+@@ -185,11 +184,8 @@
13+ unsafeAws cfg scfg manager request = do
14+ metadataRef <- liftIO $ newIORef mempty
15+
16+- let catchAll :: ResourceT IO a -> ResourceT IO (Attempt a)
17+- catchAll = E.handle (return . failure') . fmap Success
18+-
19+- failure' :: E.SomeException -> Attempt a
20+- failure' = Failure
21++ let catchAll :: ResourceT IO a -> ResourceT IO (Either E.SomeException a)
22++ catchAll = E.handle (return . Left) . fmap Right
23+
24+ resp <- catchAll $
25+ unsafeAwsRef cfg scfg manager metadataRef request
26+@@ -268,8 +264,8 @@
27+ where go request = do resp <- lift $ aws cfg scfg manager request
28+ C.yield resp
29+ case responseResult resp of
30+- Failure _ -> return ()
31+- Success x ->
32++ Left _ -> return ()
33++ Right x ->
34+ case nextIteratedRequest request x of
35+ Nothing -> return ()
36+ Just nextRequest -> go nextRequest
37+diff -ru orig/Aws/Core.hs new/Aws/Core.hs
38+--- orig/Aws/Core.hs 2014-04-03 08:17:21.058394778 +0300
39++++ new/Aws/Core.hs 2014-04-03 08:17:20.000000000 +0300
40+@@ -89,13 +89,12 @@
41+ import Control.Applicative
42+ import Control.Arrow
43+ import qualified Control.Exception as E
44+-import qualified Control.Failure as F
45+ import Control.Monad
46+ import Control.Monad.IO.Class
47++import Control.Monad.Trans.Resource (ResourceT, MonadThrow (throwM))
48+ import qualified Crypto.Classes as Crypto
49+ import qualified Crypto.HMAC as HMAC
50+ import Crypto.Hash.CryptoAPI (MD5, SHA1, SHA256, hash')
51+-import Data.Attempt (Attempt(..), FromAttempt(..))
52+ import Data.ByteString (ByteString)
53+ import qualified Data.ByteString as B
54+ import qualified Data.ByteString.Base16 as Base16
55+@@ -104,7 +103,7 @@
56+ import qualified Data.ByteString.Lazy as L
57+ import qualified Data.ByteString.UTF8 as BU
58+ import Data.Char
59+-import Data.Conduit (ResourceT, ($$+-))
60++import Data.Conduit (($$+-))
61+ import qualified Data.Conduit as C
62+ import qualified Data.Conduit.List as CL
63+ import Data.Default (def)
64+@@ -137,12 +136,12 @@
65+ --
66+ -- Response forms a Writer-like monad.
67+ data Response m a = Response { responseMetadata :: m
68+- , responseResult :: Attempt a }
69++ , responseResult :: Either E.SomeException a }
70+ deriving (Show, Functor)
71+
72+ -- | Read a response result (if it's a success response, fail otherwise).
73+-readResponse :: FromAttempt f => Response m a -> f a
74+-readResponse = fromAttempt . responseResult
75++readResponse :: MonadThrow n => Response m a -> n a
76++readResponse = either throwM return . responseResult
77+
78+ -- | Read a response result (if it's a success response, fail otherwise). In MonadIO.
79+ readResponseIO :: MonadIO io => Response m a -> io a
80+@@ -159,13 +158,13 @@
81+ --multiResponse :: Monoid m => Response m a -> Response [m] a ->
82+
83+ instance Monoid m => Monad (Response m) where
84+- return x = Response mempty (Success x)
85+- Response m1 (Failure e) >>= _ = Response m1 (Failure e)
86+- Response m1 (Success x) >>= f = let Response m2 y = f x
87++ return x = Response mempty (Right x)
88++ Response m1 (Left e) >>= _ = Response m1 (Left e)
89++ Response m1 (Right x) >>= f = let Response m2 y = f x
90+ in Response (m1 `mappend` m2) y -- currently using First-semantics, Last SHOULD work too
91+
92+-instance (Monoid m, E.Exception e) => F.Failure e (Response m) where
93+- failure e = Response mempty (F.failure e)
94++instance Monoid m => MonadThrow (Response m) where
95++ throwM e = Response mempty (throwM e)
96+
97+ -- | Add metadata to an 'IORef' (using 'mappend').
98+ tellMetadataRef :: Monoid m => IORef m -> m -> IO ()
99+@@ -696,24 +695,24 @@
100+ elCont name = laxElement name &/ content &| T.unpack
101+
102+ -- | Extract the first element from a parser result list, and throw an 'XmlException' if the list is empty.
103+-force :: F.Failure XmlException m => String -> [a] -> m a
104++force :: MonadThrow m => String -> [a] -> m a
105+ force = Cu.force . XmlException
106+
107+ -- | Extract the first element from a monadic parser result list, and throw an 'XmlException' if the list is empty.
108+-forceM :: F.Failure XmlException m => String -> [m a] -> m a
109++forceM :: MonadThrow m => String -> [m a] -> m a
110+ forceM = Cu.forceM . XmlException
111+
112+ -- | Read an integer from a 'T.Text', throwing an 'XmlException' on failure.
113+-textReadInt :: (F.Failure XmlException m, Num a) => T.Text -> m a
114++textReadInt :: (MonadThrow m, Num a) => T.Text -> m a
115+ textReadInt s = case reads $ T.unpack s of
116+ [(n,"")] -> return $ fromInteger n
117+- _ -> F.failure $ XmlException "Invalid Integer"
118++ _ -> throwM $ XmlException "Invalid Integer"
119+
120+ -- | Read an integer from a 'String', throwing an 'XmlException' on failure.
121+-readInt :: (F.Failure XmlException m, Num a) => String -> m a
122++readInt :: (MonadThrow m, Num a) => String -> m a
123+ readInt s = case reads s of
124+ [(n,"")] -> return $ fromInteger n
125+- _ -> F.failure $ XmlException "Invalid Integer"
126++ _ -> throwM $ XmlException "Invalid Integer"
127+
128+ -- | Create a complete 'HTTPResponseConsumer' from a simple function that takes a 'Cu.Cursor' to XML in the response
129+ -- body.
130+@@ -731,5 +730,5 @@
131+ let Response metadata x = parse cursor
132+ liftIO $ tellMetadataRef metadataRef metadata
133+ case x of
134+- Failure err -> liftIO $ C.monadThrow err
135+- Success v -> return v
136++ Left err -> liftIO $ throwM err
137++ Right v -> return v
138+diff -ru orig/Aws/DynamoDb/Core.hs new/Aws/DynamoDb/Core.hs
139+--- orig/Aws/DynamoDb/Core.hs 2014-04-03 08:17:21.062394778 +0300
140++++ new/Aws/DynamoDb/Core.hs 2014-04-03 08:17:20.000000000 +0300
141+@@ -2,6 +2,7 @@
142+
143+ import Aws.Core
144+ import qualified Control.Exception as C
145++import Control.Monad.Trans.Resource (throwM)
146+ import Crypto.Hash.CryptoAPI (SHA256, hash)
147+ import qualified Data.Aeson as A
148+ import qualified Data.ByteString as B
149+@@ -125,5 +126,5 @@
150+ (HTTP.Status{HTTP.statusCode=200}) -> do
151+ case A.fromJSON val of
152+ A.Success a -> return a
153+- A.Error err -> monadThrow $ DyError (HTTP.responseStatus resp) "" err
154+- _ -> monadThrow $ DyError (HTTP.responseStatus resp) "" (show val)
155++ A.Error err -> throwM $ DyError (HTTP.responseStatus resp) "" err
156++ _ -> throwM $ DyError (HTTP.responseStatus resp) "" (show val)
157+diff -ru orig/Aws/Ec2/InstanceMetadata.hs new/Aws/Ec2/InstanceMetadata.hs
158+--- orig/Aws/Ec2/InstanceMetadata.hs 2014-04-03 08:17:21.062394778 +0300
159++++ new/Aws/Ec2/InstanceMetadata.hs 2014-04-03 08:17:20.000000000 +0300
160+@@ -2,8 +2,7 @@
161+
162+ import Control.Applicative
163+ import Control.Exception
164+-import Control.Failure
165+-import Control.Monad.Trans.Resource
166++import Control.Monad.Trans.Resource (throwM)
167+ import qualified Data.ByteString.Lazy as L
168+ import qualified Data.ByteString.Lazy.Char8 as B8
169+ import Data.ByteString.Lazy.UTF8 as BU
170+@@ -16,19 +15,19 @@
171+
172+ instance Exception InstanceMetadataException
173+
174+-getInstanceMetadata :: HTTP.Manager -> String -> String -> ResIO L.ByteString
175++getInstanceMetadata :: HTTP.Manager -> String -> String -> IO L.ByteString
176+ getInstanceMetadata mgr p x = do req <- HTTP.parseUrl ("http://169.254.169.254/" ++ p ++ '/' : x)
177+ HTTP.responseBody <$> HTTP.httpLbs req mgr
178+
179+-getInstanceMetadataListing :: HTTP.Manager -> String -> ResIO [String]
180++getInstanceMetadataListing :: HTTP.Manager -> String -> IO [String]
181+ getInstanceMetadataListing mgr p = map BU.toString . B8.split '\n' <$> getInstanceMetadata mgr p ""
182+
183+-getInstanceMetadataFirst :: HTTP.Manager -> String -> ResIO L.ByteString
184++getInstanceMetadataFirst :: HTTP.Manager -> String -> IO L.ByteString
185+ getInstanceMetadataFirst mgr p = do listing <- getInstanceMetadataListing mgr p
186+ case listing of
187+- [] -> failure (MetadataNotFound p)
188++ [] -> throwM (MetadataNotFound p)
189+ (x:_) -> getInstanceMetadata mgr p x
190+
191+-getInstanceMetadataOrFirst :: HTTP.Manager -> String -> Maybe String -> ResIO L.ByteString
192++getInstanceMetadataOrFirst :: HTTP.Manager -> String -> Maybe String -> IO L.ByteString
193+ getInstanceMetadataOrFirst mgr p (Just x) = getInstanceMetadata mgr p x
194+ getInstanceMetadataOrFirst mgr p Nothing = getInstanceMetadataFirst mgr p
195+diff -ru orig/Aws/Iam/Core.hs new/Aws/Iam/Core.hs
196+--- orig/Aws/Iam/Core.hs 2014-04-03 08:17:21.062394778 +0300
197++++ new/Aws/Iam/Core.hs 2014-04-03 08:17:20.000000000 +0300
198+@@ -19,8 +19,8 @@
199+ import qualified Blaze.ByteString.Builder as Blaze
200+ import qualified Blaze.ByteString.Builder.Char8 as Blaze8
201+ import Control.Exception (Exception)
202+-import qualified Control.Failure as F
203+ import Control.Monad
204++import Control.Monad.Trans.Resource (MonadThrow, throwM)
205+ import Data.ByteString (ByteString)
206+ import Data.IORef
207+ import Data.List (intersperse, sort)
208+@@ -152,13 +152,13 @@
209+ fromError cursor = do
210+ errCode <- force "Missing Error Code" $ cursor $// elContent "Code"
211+ errMsg <- force "Missing Error Message" $ cursor $// elContent "Message"
212+- F.failure $ IamError (HTTP.responseStatus resp) errCode errMsg
213++ throwM $ IamError (HTTP.responseStatus resp) errCode errMsg
214+
215+ -- | Parses IAM @DateTime@ data type.
216+-parseDateTime :: (F.Failure XmlException m) => String -> m UTCTime
217++parseDateTime :: MonadThrow m => String -> m UTCTime
218+ parseDateTime x
219+ = case parseTime defaultTimeLocale iso8601UtcDate x of
220+- Nothing -> F.failure $ XmlException $ "Invalid DateTime: " ++ x
221++ Nothing -> throwM $ XmlException $ "Invalid DateTime: " ++ x
222+ Just dt -> return dt
223+
224+ -- | The IAM @User@ data type.
225+@@ -180,7 +180,7 @@
226+ deriving (Eq, Ord, Show, Typeable)
227+
228+ -- | Parses the IAM @User@ data type.
229+-parseUser :: (F.Failure XmlException m) => Cu.Cursor -> m User
230++parseUser :: MonadThrow m => Cu.Cursor -> m User
231+ parseUser cursor = do
232+ userArn <- attr "Arn"
233+ userCreateDate <- attr "CreateDate" >>= parseDateTime . Text.unpack
234+diff -ru orig/Aws/Iam/Internal.hs new/Aws/Iam/Internal.hs
235+--- orig/Aws/Iam/Internal.hs 2014-04-03 08:17:21.062394778 +0300
236++++ new/Aws/Iam/Internal.hs 2014-04-03 08:17:20.000000000 +0300
237+@@ -15,8 +15,8 @@
238+ import Aws.Iam.Core
239+ import Control.Applicative
240+ import Control.Arrow (second)
241+-import qualified Control.Failure as F
242+ import Control.Monad
243++import Control.Monad.Trans.Resource (MonadThrow)
244+ import Data.ByteString (ByteString)
245+ import Data.Maybe
246+ import Data.Monoid ((<>))
247+@@ -62,7 +62,7 @@
248+ -- | Reads and returns the @IsTruncated@ and @Marker@ attributes present in
249+ -- all IAM data pagination responses.
250+ markedIterResponse
251+- :: F.Failure XmlException m
252++ :: MonadThrow m
253+ => Cu.Cursor
254+ -> m (Bool, Maybe Text)
255+ markedIterResponse cursor = do
256+diff -ru orig/Aws/S3/Commands/CopyObject.hs new/Aws/S3/Commands/CopyObject.hs
257+--- orig/Aws/S3/Commands/CopyObject.hs 2014-04-03 08:17:21.062394778 +0300
258++++ new/Aws/S3/Commands/CopyObject.hs 2014-04-03 08:17:20.000000000 +0300
259+@@ -5,7 +5,7 @@
260+ import Aws.S3.Core
261+ import Control.Applicative
262+ import Control.Arrow (second)
263+-import Control.Failure
264++import Control.Monad.Trans.Resource (throwM)
265+ import qualified Data.CaseInsensitive as CI
266+ import Data.Maybe
267+ import qualified Data.Text as T
268+@@ -93,7 +93,7 @@
269+ return $ CopyObjectResponse vid lastMod etag
270+ where parse el = do
271+ let parseHttpDate' x = case parseTime defaultTimeLocale iso8601UtcDate x of
272+- Nothing -> failure $ XmlException ("Invalid Last-Modified " ++ x)
273++ Nothing -> throwM $ XmlException ("Invalid Last-Modified " ++ x)
274+ Just y -> return y
275+ lastMod <- forceM "Missing Last-Modified" $ el $/ elContent "LastModified" &| (parseHttpDate' . T.unpack)
276+ etag <- force "Missing ETag" $ el $/ elContent "ETag"
277+diff -ru orig/Aws/S3/Core.hs new/Aws/S3/Core.hs
278+--- orig/Aws/S3/Core.hs 2014-04-03 08:17:21.062394778 +0300
279++++ new/Aws/S3/Core.hs 2014-04-03 08:17:20.000000000 +0300
280+@@ -5,8 +5,8 @@
281+ import Control.Arrow ((***))
282+ import Control.Monad
283+ import Control.Monad.IO.Class
284++import Control.Monad.Trans.Resource (MonadThrow, throwM)
285+ import Crypto.Hash.CryptoAPI (MD5)
286+-import Data.Attempt (Attempt(..))
287+ import Data.Conduit (($$+-))
288+ import Data.Function
289+ import Data.IORef
290+@@ -20,12 +20,10 @@
291+ import qualified Blaze.ByteString.Builder as Blaze
292+ import qualified Blaze.ByteString.Builder.Char8 as Blaze8
293+ import qualified Control.Exception as C
294+-import qualified Control.Failure as F
295+ import qualified Data.ByteString as B
296+ import qualified Data.ByteString.Char8 as B8
297+ import qualified Data.ByteString.Base64 as Base64
298+ import qualified Data.CaseInsensitive as CI
299+-import qualified Data.Conduit as C
300+ import qualified Data.Serialize as Serialize
301+ import qualified Data.Text as T
302+ import qualified Data.Text.Encoding as T
303+@@ -248,10 +246,10 @@
304+ = do doc <- HTTP.responseBody resp $$+- XML.sinkDoc XML.def
305+ let cursor = Cu.fromDocument doc
306+ liftIO $ case parseError cursor of
307+- Success err -> C.monadThrow err
308+- Failure otherErr -> C.monadThrow otherErr
309++ Right err -> throwM err
310++ Left otherErr -> throwM otherErr
311+ where
312+- parseError :: Cu.Cursor -> Attempt S3Error
313++ parseError :: Cu.Cursor -> Either C.SomeException S3Error
314+ parseError root = do code <- force "Missing error Code" $ root $/ elContent "Code"
315+ message <- force "Missing error Message" $ root $/ elContent "Message"
316+ let resource = listToMaybe $ root $/ elContent "Resource"
317+@@ -279,7 +277,7 @@
318+ }
319+ deriving (Show)
320+
321+-parseUserInfo :: F.Failure XmlException m => Cu.Cursor -> m UserInfo
322++parseUserInfo :: MonadThrow m => Cu.Cursor -> m UserInfo
323+ parseUserInfo el = do id_ <- force "Missing user ID" $ el $/ elContent "ID"
324+ displayName <- force "Missing user DisplayName" $ el $/ elContent "DisplayName"
325+ return UserInfo { userId = id_, userDisplayName = displayName }
326+@@ -308,10 +306,10 @@
327+ | ReducedRedundancy
328+ deriving (Show)
329+
330+-parseStorageClass :: F.Failure XmlException m => T.Text -> m StorageClass
331++parseStorageClass :: MonadThrow m => T.Text -> m StorageClass
332+ parseStorageClass "STANDARD" = return Standard
333+ parseStorageClass "REDUCED_REDUNDANCY" = return ReducedRedundancy
334+-parseStorageClass s = F.failure . XmlException $ "Invalid Storage Class: " ++ T.unpack s
335++parseStorageClass s = throwM . XmlException $ "Invalid Storage Class: " ++ T.unpack s
336+
337+ writeStorageClass :: StorageClass -> T.Text
338+ writeStorageClass Standard = "STANDARD"
339+@@ -321,9 +319,9 @@
340+ = AES256
341+ deriving (Show)
342+
343+-parseServerSideEncryption :: F.Failure XmlException m => T.Text -> m ServerSideEncryption
344++parseServerSideEncryption :: MonadThrow m => T.Text -> m ServerSideEncryption
345+ parseServerSideEncryption "AES256" = return AES256
346+-parseServerSideEncryption s = F.failure . XmlException $ "Invalid Server Side Encryption: " ++ T.unpack s
347++parseServerSideEncryption s = throwM . XmlException $ "Invalid Server Side Encryption: " ++ T.unpack s
348+
349+ writeServerSideEncryption :: ServerSideEncryption -> T.Text
350+ writeServerSideEncryption AES256 = "AES256"
351+@@ -358,11 +356,11 @@
352+ }
353+ deriving (Show)
354+
355+-parseObjectInfo :: F.Failure XmlException m => Cu.Cursor -> m ObjectInfo
356++parseObjectInfo :: MonadThrow m => Cu.Cursor -> m ObjectInfo
357+ parseObjectInfo el
358+ = do key <- force "Missing object Key" $ el $/ elContent "Key"
359+ let time s = case parseTime defaultTimeLocale "%Y-%m-%dT%H:%M:%S%QZ" $ T.unpack s of
360+- Nothing -> F.failure $ XmlException "Invalid time"
361++ Nothing -> throwM $ XmlException "Invalid time"
362+ Just v -> return v
363+ lastModified <- forceM "Missing object LastModified" $ el $/ elContent "LastModified" &| time
364+ eTag <- force "Missing object ETag" $ el $/ elContent "ETag"
365+@@ -392,7 +390,7 @@
366+ }
367+ deriving (Show)
368+
369+-parseObjectMetadata :: F.Failure HeaderException m => HTTP.ResponseHeaders -> m ObjectMetadata
370++parseObjectMetadata :: MonadThrow m => HTTP.ResponseHeaders -> m ObjectMetadata
371+ parseObjectMetadata h = ObjectMetadata
372+ `liftM` deleteMarker
373+ `ap` etag
374+@@ -406,15 +404,15 @@
375+ Nothing -> return False
376+ Just "true" -> return True
377+ Just "false" -> return False
378+- Just x -> F.failure $ HeaderException ("Invalid x-amz-delete-marker " ++ x)
379++ Just x -> throwM $ HeaderException ("Invalid x-amz-delete-marker " ++ x)
380+ etag = case T.decodeUtf8 `fmap` lookup "ETag" h of
381+ Just x -> return x
382+- Nothing -> F.failure $ HeaderException "ETag missing"
383++ Nothing -> throwM $ HeaderException "ETag missing"
384+ lastModified = case B8.unpack `fmap` lookup "Last-Modified" h of
385+ Just ts -> case parseHttpDate ts of
386+ Just t -> return t
387+- Nothing -> F.failure $ HeaderException ("Invalid Last-Modified: " ++ ts)
388+- Nothing -> F.failure $ HeaderException "Last-Modified missing"
389++ Nothing -> throwM $ HeaderException ("Invalid Last-Modified: " ++ ts)
390++ Nothing -> throwM $ HeaderException "Last-Modified missing"
391+ versionId = T.decodeUtf8 `fmap` lookup "x-amz-version-id" h
392+ -- expiration = return undefined
393+ userMetadata = flip mapMaybe ht $
394+diff -ru orig/Aws/Ses/Core.hs new/Aws/Ses/Core.hs
395+--- orig/Aws/Ses/Core.hs 2014-04-03 08:17:21.062394778 +0300
396++++ new/Aws/Ses/Core.hs 2014-04-03 08:17:20.000000000 +0300
397+@@ -22,8 +22,8 @@
398+ import qualified Blaze.ByteString.Builder as Blaze
399+ import qualified Blaze.ByteString.Builder.Char8 as Blaze8
400+ import qualified Control.Exception as C
401+-import qualified Control.Failure as F
402+ import Control.Monad (mplus)
403++import Control.Monad.Trans.Resource (throwM)
404+ import qualified Data.ByteString as B
405+ import qualified Data.ByteString.Base64 as B64
406+ import Data.ByteString.Char8 ({-IsString-})
407+@@ -128,7 +128,7 @@
408+ fromError cursor = do
409+ errCode <- force "Missing Error Code" $ cursor $// elContent "Code"
410+ errMessage <- force "Missing Error Message" $ cursor $// elContent "Message"
411+- F.failure $ SesError (HTTP.responseStatus resp) errCode errMessage
412++ throwM $ SesError (HTTP.responseStatus resp) errCode errMessage
413+
414+ class SesAsQuery a where
415+ -- | Write a data type as a list of query parameters.
416+diff -ru orig/Aws/SimpleDb/Core.hs new/Aws/SimpleDb/Core.hs
417+--- orig/Aws/SimpleDb/Core.hs 2014-04-03 08:17:21.066394778 +0300
418++++ new/Aws/SimpleDb/Core.hs 2014-04-03 08:17:20.000000000 +0300
419+@@ -4,8 +4,8 @@
420+ import qualified Blaze.ByteString.Builder as Blaze
421+ import qualified Blaze.ByteString.Builder.Char8 as Blaze8
422+ import qualified Control.Exception as C
423+-import qualified Control.Failure as F
424+ import Control.Monad
425++import Control.Monad.Trans.Resource (MonadThrow, throwM)
426+ import qualified Data.ByteString as B
427+ import qualified Data.ByteString.Base64 as Base64
428+ import Data.IORef
429+@@ -149,16 +149,16 @@
430+ (err:_) -> fromError err
431+ fromError cursor = do errCode <- force "Missing Error Code" $ cursor $// elCont "Code"
432+ errMessage <- force "Missing Error Message" $ cursor $// elCont "Message"
433+- F.failure $ SdbError (HTTP.responseStatus resp) errCode errMessage
434++ throwM $ SdbError (HTTP.responseStatus resp) errCode errMessage
435+
436+ class SdbFromResponse a where
437+ sdbFromResponse :: Cu.Cursor -> Response SdbMetadata a
438+
439+-sdbCheckResponseType :: F.Failure XmlException m => a -> T.Text -> Cu.Cursor -> m a
440++sdbCheckResponseType :: MonadThrow m => a -> T.Text -> Cu.Cursor -> m a
441+ sdbCheckResponseType a n c = do _ <- force ("Expected response type " ++ T.unpack n) (Cu.laxElement n c)
442+ return a
443+
444+-decodeBase64 :: F.Failure XmlException m => Cu.Cursor -> m T.Text
445++decodeBase64 :: MonadThrow m => Cu.Cursor -> m T.Text
446+ decodeBase64 cursor =
447+ let encoded = T.concat $ cursor $/ Cu.content
448+ encoding = listToMaybe $ cursor $| Cu.laxAttribute "encoding" &| T.toCaseFold
449+@@ -166,15 +166,15 @@
450+ case encoding of
451+ Nothing -> return encoded
452+ Just "base64" -> case Base64.decode . T.encodeUtf8 $ encoded of
453+- Left msg -> F.failure $ XmlException ("Invalid Base64 data: " ++ msg)
454++ Left msg -> throwM $ XmlException ("Invalid Base64 data: " ++ msg)
455+ Right x -> return $ T.decodeUtf8 x
456+- Just actual -> F.failure $ XmlException ("Unrecognized encoding " ++ T.unpack actual)
457++ Just actual -> throwM $ XmlException ("Unrecognized encoding " ++ T.unpack actual)
458+
459+ data Attribute a
460+ = ForAttribute { attributeName :: T.Text, attributeData :: a }
461+ deriving (Show)
462+
463+-readAttribute :: F.Failure XmlException m => Cu.Cursor -> m (Attribute T.Text)
464++readAttribute :: MonadThrow m => Cu.Cursor -> m (Attribute T.Text)
465+ readAttribute cursor = do
466+ name <- forceM "Missing Name" $ cursor $/ Cu.laxElement "Name" &| decodeBase64
467+ value <- forceM "Missing Value" $ cursor $/ Cu.laxElement "Value" &| decodeBase64
468+@@ -225,7 +225,7 @@
469+ = Item { itemName :: T.Text, itemData :: a }
470+ deriving (Show)
471+
472+-readItem :: F.Failure XmlException m => Cu.Cursor -> m (Item [Attribute T.Text])
473++readItem :: MonadThrow m => Cu.Cursor -> m (Item [Attribute T.Text])
474+ readItem cursor = do
475+ name <- force "Missing Name" <=< sequence $ cursor $/ Cu.laxElement "Name" &| decodeBase64
476+ attributes <- sequence $ cursor $/ Cu.laxElement "Attribute" &| readAttribute
477+diff -ru orig/Aws/Sqs/Commands/Message.hs new/Aws/Sqs/Commands/Message.hs
478+--- orig/Aws/Sqs/Commands/Message.hs 2014-04-03 08:17:21.066394778 +0300
479++++ new/Aws/Sqs/Commands/Message.hs 2014-04-03 08:17:20.000000000 +0300
480+@@ -4,9 +4,9 @@
481+ import Aws.Core
482+ import Aws.Sqs.Core
483+ import Control.Applicative
484++import Control.Monad.Trans.Resource (MonadThrow)
485+ import Data.Maybe
486+ import Text.XML.Cursor (($/), ($//), (&/), (&|))
487+-import qualified Control.Failure as F
488+ import qualified Data.ByteString.Char8 as B
489+ import qualified Data.Text as T
490+ import qualified Data.Text.Encoding as TE
491+@@ -98,7 +98,7 @@
492+ }
493+ deriving (Show)
494+
495+-readMessageAttribute :: F.Failure XmlException m => Cu.Cursor -> m (MessageAttribute,T.Text)
496++readMessageAttribute :: MonadThrow m => Cu.Cursor -> m (MessageAttribute,T.Text)
497+ readMessageAttribute cursor = do
498+ name <- force "Missing Name" $ cursor $/ Cu.laxElement "Name" &/ Cu.content
499+ value <- force "Missing Value" $ cursor $/ Cu.laxElement "Value" &/ Cu.content
500+diff -ru orig/Aws/Sqs/Core.hs new/Aws/Sqs/Core.hs
501+--- orig/Aws/Sqs/Core.hs 2014-04-03 08:17:21.066394778 +0300
502++++ new/Aws/Sqs/Core.hs 2014-04-03 08:17:20.000000000 +0300
503+@@ -5,14 +5,12 @@
504+ import qualified Blaze.ByteString.Builder as Blaze
505+ import qualified Blaze.ByteString.Builder.Char8 as Blaze8
506+ import qualified Control.Exception as C
507+-import qualified Control.Failure as F
508+ import Control.Monad
509+ import Control.Monad.IO.Class
510+-import Data.Attempt (Attempt(..))
511++import Control.Monad.Trans.Resource (MonadThrow, throwM)
512+ import qualified Data.ByteString as B
513+ import qualified Data.ByteString.Char8 as BC
514+ import Data.Conduit (($$+-))
515+-import qualified Data.Conduit as C
516+ import Data.IORef
517+ import Data.List
518+ import Data.Maybe
519+@@ -234,10 +232,10 @@
520+ = do doc <- HTTP.responseBody resp $$+- XML.sinkDoc XML.def
521+ let cursor = Cu.fromDocument doc
522+ liftIO $ case parseError cursor of
523+- Success err -> C.monadThrow err
524+- Failure otherErr -> C.monadThrow otherErr
525++ Right err -> throwM err
526++ Left otherErr -> throwM otherErr
527+ where
528+- parseError :: Cu.Cursor -> Attempt SqsError
529++ parseError :: Cu.Cursor -> Either C.SomeException SqsError
530+ parseError root = do cursor <- force "Missing Error" $ root $/ Cu.laxElement "Error"
531+ code <- force "Missing error Code" $ cursor $/ elContent "Code"
532+ message <- force "Missing error Message" $ cursor $/ elContent "Message"
533+@@ -291,7 +289,7 @@
534+ | PermissionGetQueueAttributes
535+ deriving (Show, Enum, Eq)
536+
537+-parseQueueAttribute :: F.Failure XmlException m => T.Text -> m QueueAttribute
538++parseQueueAttribute :: MonadThrow m => T.Text -> m QueueAttribute
539+ parseQueueAttribute "ApproximateNumberOfMessages" = return ApproximateNumberOfMessages
540+ parseQueueAttribute "ApproximateNumberOfMessagesNotVisible" = return ApproximateNumberOfMessagesNotVisible
541+ parseQueueAttribute "VisibilityTimeout" = return VisibilityTimeout
542+@@ -301,7 +299,7 @@
543+ parseQueueAttribute "MaximumMessageSize" = return MaximumMessageSize
544+ parseQueueAttribute "MessageRetentionPeriod" = return MessageRetentionPeriod
545+ parseQueueAttribute "QueueArn" = return QueueArn
546+-parseQueueAttribute x = F.failure $ XmlException ( "Invalid Attribute Name. " ++ show x)
547++parseQueueAttribute x = throwM $ XmlException ( "Invalid Attribute Name. " ++ show x)
548+
549+ printQueueAttribute :: QueueAttribute -> T.Text
550+ printQueueAttribute QueueAll = "All"
551+@@ -315,12 +313,12 @@
552+ printQueueAttribute MessageRetentionPeriod = "MessageRetentionPeriod"
553+ printQueueAttribute QueueArn = "QueueArn"
554+
555+-parseMessageAttribute :: F.Failure XmlException m => T.Text -> m MessageAttribute
556++parseMessageAttribute :: MonadThrow m => T.Text -> m MessageAttribute
557+ parseMessageAttribute "SenderId" = return SenderId
558+ parseMessageAttribute "SentTimestamp" = return SentTimestamp
559+ parseMessageAttribute "ApproximateReceiveCount" = return ApproximateReceiveCount
560+ parseMessageAttribute "ApproximateFirstReceiveTimestamp" = return ApproximateFirstReceiveTimestamp
561+-parseMessageAttribute x = F.failure $ XmlException ( "Invalid Attribute Name. " ++ show x)
562++parseMessageAttribute x = throwM $ XmlException ( "Invalid Attribute Name. " ++ show x)
563+
564+ printMessageAttribute :: MessageAttribute -> T.Text
565+ printMessageAttribute MessageAll = "All"
1566diff -ru orig/aws.cabal new/aws.cabal
2−--- orig/aws.cabal 2014-04-02 13:40:50.015820737 +0300
3−+++ new/aws.cabal 2014-04-02 13:40:49.000000000 +0300
4−@@ -130,7 +130,9 @@
567+--- orig/aws.cabal 2014-04-03 08:17:21.070394778 +0300
568++++ new/aws.cabal 2014-04-03 08:17:20.000000000 +0300
569+@@ -20,7 +20,7 @@
570+ Source-repository this
571+ type: git
572+ location: https://github.com/aristidb/aws.git
573+- tag: 0.8.5
574++ tag: 0.8.6
575+
576+ Source-repository head
577+ type: git
578+@@ -98,8 +98,6 @@
579+ Aws.DynamoDb.Core
580+
581+ Build-depends:
582+- attempt >= 0.3.1.1 && < 0.5,
583+- attoparsec-conduit >= 1.0 && < 1.1,
584+ aeson >= 0.6 && < 0.8,
585+ base == 4.*,
586+ base16-bytestring == 0.1.*,
587+@@ -108,29 +106,29 @@
588+ bytestring >= 0.9 && < 0.11,
589+ case-insensitive >= 0.2 && < 1.3,
590+ cereal >= 0.3 && < 0.5,
591+- conduit >= 1.0 && < 1.1,
592++ conduit >= 1.1 && < 1.2,
593++ conduit-extra >= 1.1 && < 1.2,
594+ containers >= 0.4,
595+ crypto-api >= 0.9,
596+ cryptohash >= 0.8 && < 0.12,
597+ cryptohash-cryptoapi == 0.1.*,
598+ data-default == 0.5.*,
599+ directory >= 1.0 && < 1.3,
600+- failure >= 0.2.0.1 && < 0.3,
601+ filepath >= 1.1 && < 1.4,
602+- http-conduit >= 1.9 && < 2.1,
603++ http-conduit >= 2.1 && < 2.2,
604+ http-types >= 0.7 && < 0.9,
605+ lifted-base >= 0.1 && < 0.3,
606+ monad-control >= 0.3,
607+ mtl == 2.*,
608+ old-locale == 1.*,
609+- resourcet >= 0.3.3 && <0.5,
610++ resourcet >= 1.1 && < 1.2,
611+ text >= 0.11,
612+ time >= 1.1.4 && < 1.5,
613+ transformers >= 0.2.2.0 && < 0.4,
5614 unordered-containers >= 0.2,
6615 utf8-string == 0.3.*,
7616 vector >= 0.10,
8617- xml-conduit >= 1.1 && <1.2
9−+ xml-conduit >= 1.1 && <1.2,
10−+ http-client < 0.3,
11−+ ghc-prim
618++ xml-conduit >= 1.2 && <1.3
12619
13620 GHC-Options: -Wall
14621
622+diff -ru orig/README.org new/README.org
623+--- orig/README.org 2014-04-03 08:17:21.058394778 +0300
624++++ new/README.org 2014-04-03 08:17:20.000000000 +0300
625+@@ -90,6 +90,10 @@
626+
627+ ** 0.8 series
628+
629++- 0.8.6
630++ - move Instance metadata functions out of ResourceT to remove problem with exceptions-0.5
631++ (this makes a fresh install of aws on a clean system possible again)
632++
633+ - 0.8.5
634+ - compatibility with case-insensitive 1.2
635+ - support for V4 signatures
patching/patches/cereal-conduit-0.7.2.patchnew file+53
@@ -0,0 +1,53 @@
1+diff -ru orig/cereal-conduit.cabal new/cereal-conduit.cabal
2+--- orig/cereal-conduit.cabal 2014-04-03 08:22:14.122388542 +0300
3++++ new/cereal-conduit.cabal 2014-04-03 08:22:13.000000000 +0300
4+@@ -19,7 +19,8 @@
5+
6+ library
7+ build-depends: base >= 4 && < 5
8+- , conduit >= 1.0.0 && < 1.1
9++ , conduit >= 1.0.0 && < 1.2
10++ , resourcet >= 0.4 && < 1.2
11+ , cereal >= 0.4.0.0 && < 0.5
12+ , bytestring
13+ , transformers >= 0.2.0.0
14+diff -ru orig/Data/Conduit/Cereal.hs new/Data/Conduit/Cereal.hs
15+--- orig/Data/Conduit/Cereal.hs 2014-04-03 08:22:14.122388542 +0300
16++++ new/Data/Conduit/Cereal.hs 2014-04-03 08:22:13.000000000 +0300
17+@@ -19,6 +19,7 @@
18+
19+ import Control.Exception.Base
20+ import Control.Monad.Trans.Class (MonadTrans, lift)
21++import Control.Monad.Trans.Resource (MonadThrow, monadThrow)
22+ import qualified Data.ByteString as BS
23+ import qualified Data.ByteString.Lazy as LBS
24+ import qualified Data.Conduit as C
25+@@ -34,7 +35,7 @@
26+ instance Exception GetException
27+
28+ -- | Run a 'Get' repeatedly on the input stream, producing an output stream of whatever the 'Get' outputs.
29+-conduitGet :: C.MonadThrow m => Get o -> C.Conduit BS.ByteString m o
30++conduitGet :: MonadThrow m => Get o -> C.Conduit BS.ByteString m o
31+ conduitGet = mkConduitGet errorHandler
32+ where errorHandler msg = pipeError $ GetException msg
33+
34+@@ -42,7 +43,7 @@
35+ --
36+ -- If 'Get' succeed it will return the data read and unconsumed part of the input stream.
37+ -- If the 'Get' fails due to deserialization error or early termination of the input stream it raise an error.
38+-sinkGet :: C.MonadThrow m => Get r -> C.Consumer BS.ByteString m r
39++sinkGet :: MonadThrow m => Get r -> C.Consumer BS.ByteString m r
40+ sinkGet = mkSinkGet errorHandler terminationHandler
41+ where errorHandler msg = pipeError $ GetException msg
42+ terminationHandler f = case f BS.empty of
43+@@ -50,8 +51,8 @@
44+ Done r lo -> C.leftover lo >> return r
45+ Partial _ -> pipeError $ GetException "Failed reading: Internal error: unexpected Partial."
46+
47+-pipeError :: (C.MonadThrow m, MonadTrans t, Exception e) => e -> t m a
48+-pipeError e = lift $ C.monadThrow e
49++pipeError :: (MonadThrow m, MonadTrans t, Exception e) => e -> t m a
50++pipeError e = lift $ monadThrow e
51+
52+ -- | Convert a 'Put' into a 'Source'. Runs in constant memory.
53+ sourcePut :: Monad m => Put -> C.Producer m BS.ByteString
patching/patches/diagrams-builder-0.5.0.6.patchnew file+12
@@ -0,0 +1,12 @@
1+diff -ru orig/diagrams-builder.cabal new/diagrams-builder.cabal
2+--- orig/diagrams-builder.cabal 2014-04-03 08:17:21.630394766 +0300
3++++ new/diagrams-builder.cabal 2014-04-03 08:17:21.000000000 +0300
4+@@ -59,7 +59,7 @@
5+ cmdargs >= 0.6 && < 0.11,
6+ lens >= 3.9 && < 4.2,
7+ hashable >= 1.1 && < 1.3,
8+- exceptions >= 0.3 && < 0.4
9++ exceptions >= 0.3 && < 0.6
10+ hs-source-dirs: src
11+ default-language: Haskell2010
12+ other-extensions: StandaloneDeriving,
patching/patches/esqueleto-1.3.8.patchnew file+12
@@ -0,0 +1,12 @@
1+diff -ru orig/esqueleto.cabal new/esqueleto.cabal
2+--- orig/esqueleto.cabal 2014-04-03 08:31:02.238377300 +0300
3++++ new/esqueleto.cabal 2014-04-03 08:31:01.000000000 +0300
4+@@ -91,7 +91,7 @@
5+ , containers
6+ , HUnit
7+ , QuickCheck
8+- , hspec >= 1.9
9++ , hspec >= 1.8
10+ , persistent-sqlite >= 1.2 && < 1.4
11+ , persistent-template >= 1.2 && < 1.4
12+ , monad-control
patching/patches/process-conduit-1.0.0.2.patchnew file+62
@@ -0,0 +1,62 @@
1+diff -ru orig/Data/Conduit/Process.hs new/Data/Conduit/Process.hs
2+--- orig/Data/Conduit/Process.hs 2014-04-03 08:26:07.254383579 +0300
3++++ new/Data/Conduit/Process.hs 2014-04-03 08:26:06.000000000 +0300
4+@@ -21,6 +21,7 @@
5+ import Control.Monad
6+ import Control.Monad.Trans
7+ import Control.Monad.Trans.Loop
8++import Control.Monad.Trans.Resource (MonadResource, monadThrow)
9+ import qualified Data.ByteString as S
10+ import Data.Conduit
11+ import qualified Data.Conduit.List as CL
12+diff -ru orig/process-conduit.cabal new/process-conduit.cabal
13+--- orig/process-conduit.cabal 2014-04-03 08:26:07.258383579 +0300
14++++ new/process-conduit.cabal 2014-04-03 08:26:06.000000000 +0300
15+@@ -33,7 +33,8 @@
16+ , bytestring >= 0.9
17+ , text >= 0.11
18+ , process >= 1.0
19+- , conduit == 1.0.*
20++ , conduit >= 1.0 && < 1.2
21++ , resourcet >= 0.4 && < 1.2
22+ , shakespeare-text >= 1.0
23+ , shakespeare
24+
25+@@ -47,4 +48,6 @@
26+ , bytestring
27+ , hspec >= 1.3
28+ , conduit
29++ , conduit-extra
30++ , resourcet
31+ , process-conduit
32+diff -ru orig/System/Process/QQ.hs new/System/Process/QQ.hs
33+--- orig/System/Process/QQ.hs 2014-04-03 08:26:07.254383579 +0300
34++++ new/System/Process/QQ.hs 2014-04-03 08:26:06.000000000 +0300
35+@@ -14,6 +14,7 @@
36+ import qualified Data.Text.Lazy as LT
37+ import Language.Haskell.TH.Quote
38+ import Text.Shakespeare.Text
39++import Control.Monad.Trans.Resource (runResourceT)
40+
41+ import Data.Conduit.Process
42+
43+@@ -28,7 +29,7 @@
44+ -- | Command result of (Lazy) ByteString.
45+ cmd :: QuasiQuoter
46+ cmd = def { quoteExp = \str -> [|
47+- BL.fromChunks <$> C.runResourceT (sourceCmd (LT.unpack $(quoteExp lt str)) C.$$ CL.consume)
48++ BL.fromChunks <$> runResourceT (sourceCmd (LT.unpack $(quoteExp lt str)) C.$$ CL.consume)
49+ |] }
50+
51+ -- | Source of shell command
52+diff -ru orig/test.hs new/test.hs
53+--- orig/test.hs 2014-04-03 08:26:07.254383579 +0300
54++++ new/test.hs 2014-04-03 08:26:06.000000000 +0300
55+@@ -7,6 +7,7 @@
56+ import Data.Conduit
57+ import qualified Data.Conduit.Binary as CB
58+ import Test.Hspec
59++import Control.Monad.Trans.Resource (runResourceT)
60+
61+ main :: IO ()
62+ main = hspec $ do
patching/patches/stm-conduit-2.3.0.patchnew file+16
@@ -0,0 +1,16 @@
1+diff -ru orig/stm-conduit.cabal new/stm-conduit.cabal
2+--- orig/stm-conduit.cabal 2014-04-03 08:22:14.310388538 +0300
3++++ new/stm-conduit.cabal 2014-04-03 08:22:14.000000000 +0300
4+@@ -29,9 +29,10 @@
5+ , stm-chans >= 2.0 && < 3.1
6+ , cereal >= 0.4.0.1
7+ , cereal-conduit >= 0.7.2
8+- , conduit == 1.0.*
9++ , conduit >= 1.0 && < 1.2
10++ , conduit-extra >= 1.0 && < 1.2
11+ , directory >= 1.1
12+- , resourcet >= 0.3 && < 0.5
13++ , resourcet >= 0.3 && < 1.2
14+ , async >= 2.0.1
15+ , monad-control >= 0.3.2
16+ , monad-loops >= 0.4.2
patching/patches/temporary-1.2.0.1.patchnew file+12
@@ -0,0 +1,12 @@
1+diff -ru orig/temporary.cabal new/temporary.cabal
2+--- orig/temporary.cabal 2014-04-03 08:17:21.902394760 +0300
3++++ new/temporary.cabal 2014-04-03 08:17:21.000000000 +0300
4+@@ -23,7 +23,7 @@
5+ other-modules: Distribution.Compat.Exception
6+ Distribution.Compat.TempFile
7+ build-depends: base >= 3 && < 6, filepath >= 1.1 && < 1.4, directory >= 1.0 && < 1.3,
8+- transformers >= 0.2.0.0 && < 0.4, exceptions >= 0.1.1 && < 0.4
9++ transformers >= 0.2.0.0 && < 0.4, exceptions >= 0.1.1 && < 0.6
10+
11+ if !os(windows)
12+ build-depends: unix >= 2.3 && < 2.8
patching/patches/websockets-0.8.2.0.patchnew file+21
@@ -0,0 +1,21 @@
1+diff -ru orig/websockets.cabal new/websockets.cabal
2+--- orig/websockets.cabal 2014-04-03 08:32:53.818374925 +0300
3++++ new/websockets.cabal 2014-04-03 08:32:53.000000000 +0300
4+@@ -69,7 +69,7 @@
5+ binary >= 0.5 && < 0.8,
6+ blaze-builder >= 0.3 && < 0.4,
7+ bytestring >= 0.9 && < 0.11,
8+- case-insensitive >= 0.3 && < 1.2,
9++ case-insensitive >= 0.3 && < 1.3,
10+ containers >= 0.3 && < 0.6,
11+ io-streams >= 1.1 && < 1.2,
12+ mtl >= 2.0 && < 2.2,
13+@@ -105,7 +105,7 @@
14+ binary >= 0.5 && < 0.8,
15+ blaze-builder >= 0.3 && < 0.4,
16+ bytestring >= 0.9 && < 0.11,
17+- case-insensitive >= 0.3 && < 1.2,
18++ case-insensitive >= 0.3 && < 1.3,
19+ containers >= 0.3 && < 0.6,
20+ io-streams >= 1.1 && < 1.2,
21+ mtl >= 2.0 && < 2.2,