aws 0.5.0 → 0.6.0
raw patch · 12 files changed
+137/−82 lines, 12 filesdep +containersdep ~conduitdep ~http-conduitdep ~http-typesPVP ok
version bump matches the API change (PVP)
Dependencies added: containers
Dependency ranges changed: conduit, http-conduit, http-types, xml-conduit
API changes (from Hackage documentation)
+ Aws.S3.Commands.GetObject: goVersionId :: GetObject a -> Maybe Text
- Aws: type HTTPResponseConsumer a = Status -> ResponseHeaders -> Source (ResourceT IO) ByteString -> ResourceT IO a
+ Aws: type HTTPResponseConsumer a = Status -> ResponseHeaders -> ResumableSource (ResourceT IO) ByteString -> ResourceT IO a
- Aws.Core: SignedQuery :: Method -> Protocol -> ByteString -> Int -> ByteString -> Query -> Maybe UTCTime -> Maybe ByteString -> Maybe ByteString -> Maybe ByteString -> RequestHeaders -> RequestHeaders -> Maybe (RequestBody (ResourceT IO)) -> ByteString -> SignedQuery
+ Aws.Core: SignedQuery :: Method -> Protocol -> ByteString -> Int -> ByteString -> Query -> Maybe UTCTime -> Maybe ByteString -> Maybe ByteString -> Maybe MD5 -> RequestHeaders -> RequestHeaders -> Maybe (RequestBody (ResourceT IO)) -> ByteString -> SignedQuery
- Aws.Core: sqContentMd5 :: SignedQuery -> Maybe ByteString
+ Aws.Core: sqContentMd5 :: SignedQuery -> Maybe MD5
- Aws.Core: type HTTPResponseConsumer a = Status -> ResponseHeaders -> Source (ResourceT IO) ByteString -> ResourceT IO a
+ Aws.Core: type HTTPResponseConsumer a = Status -> ResponseHeaders -> ResumableSource (ResourceT IO) ByteString -> ResourceT IO a
- Aws.S3.Commands.GetObject: GetObject :: Bucket -> Object -> HTTPResponseConsumer a -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> GetObject a
+ Aws.S3.Commands.GetObject: GetObject :: Bucket -> Object -> HTTPResponseConsumer a -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> GetObject a
- Aws.S3.Commands.PutObject: PutObject :: Text -> Bucket -> Maybe ByteString -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe ByteString -> Maybe Int -> Maybe CannedAcl -> Maybe StorageClass -> RequestBody (ResourceT IO) -> [(Text, Text)] -> PutObject
+ Aws.S3.Commands.PutObject: PutObject :: Text -> Bucket -> Maybe ByteString -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe MD5 -> Maybe Int -> Maybe CannedAcl -> Maybe StorageClass -> RequestBody (ResourceT IO) -> [(Text, Text)] -> PutObject
- Aws.S3.Commands.PutObject: poContentMD5 :: PutObject -> Maybe ByteString
+ Aws.S3.Commands.PutObject: poContentMD5 :: PutObject -> Maybe MD5
- Aws.S3.Commands.PutObject: putObject :: Text -> Bucket -> RequestBody (ResourceT IO) -> PutObject
+ Aws.S3.Commands.PutObject: putObject :: Bucket -> Text -> RequestBody (ResourceT IO) -> PutObject
- Aws.S3.Core: S3Query :: Method -> Maybe ByteString -> Maybe ByteString -> Query -> Query -> Maybe ByteString -> Maybe ByteString -> RequestHeaders -> RequestHeaders -> Maybe (RequestBody (ResourceT IO)) -> S3Query
+ Aws.S3.Core: S3Query :: Method -> Maybe ByteString -> Maybe ByteString -> Query -> Query -> Maybe ByteString -> Maybe MD5 -> RequestHeaders -> RequestHeaders -> Maybe (RequestBody (ResourceT IO)) -> S3Query
- Aws.S3.Core: s3QContentMd5 :: S3Query -> Maybe ByteString
+ Aws.S3.Core: s3QContentMd5 :: S3Query -> Maybe MD5
Files
- Aws/Core.hs +34/−33
- Aws/S3/Commands/GetBucket.hs +9/−9
- Aws/S3/Commands/GetObject.hs +11/−9
- Aws/S3/Commands/PutBucket.hs +3/−2
- Aws/S3/Commands/PutObject.hs +12/−11
- Aws/S3/Core.hs +10/−8
- Aws/SimpleDb/Core.hs +1/−1
- Aws/Sqs/Core.hs +2/−2
- Examples/GetObject.hs +1/−1
- Examples/SimpleDb.hs +25/−0
- README.org +22/−1
- aws.cabal +7/−5
Aws/Core.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, TypeFamilies, FlexibleContexts, FlexibleInstances, DeriveFunctor, OverloadedStrings, RecordWildCards, DeriveDataTypeable #-}+{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, TypeFamilies, FlexibleContexts, FlexibleInstances, DeriveFunctor, OverloadedStrings, RecordWildCards, DeriveDataTypeable, Rank2Types, ExistentialQuantification #-} module Aws.Core ( -- * Response -- ** Metadata in responses@@ -72,11 +72,11 @@ import Control.Arrow import Control.Monad import Control.Monad.IO.Class-import Data.Attempt (Attempt(..))-import Data.ByteString (ByteString)-import Data.ByteString.Char8 ({- IsString -})+import Data.Attempt (Attempt(..))+import Data.ByteString (ByteString)+import Data.ByteString.Char8 ({- IsString -}) import Data.Char-import Data.Conduit (Source, ResourceT, ($$))+import Data.Conduit (ResourceT, ($$+-)) import Data.IORef import Data.List import Data.Maybe@@ -86,30 +86,31 @@ import Data.Word import System.Directory import System.Environment-import System.FilePath ((</>))+import System.FilePath ((</>)) import System.Locale-import Text.XML.Cursor hiding (force, forceM)-import qualified Blaze.ByteString.Builder as Blaze-import qualified Control.Exception as E-import qualified Control.Failure as F-import qualified Crypto.Classes as Crypto-import qualified Crypto.HMAC as HMAC-import qualified Crypto.Hash.SHA1 as SHA1-import qualified Crypto.Hash.SHA256 as SHA256-import qualified Data.ByteString as B-import qualified Data.ByteString.Base64 as Base64-import qualified Data.ByteString.Lazy as L-import qualified Data.ByteString.UTF8 as BU-import qualified Data.Conduit as C-import qualified Data.Conduit.List as CL-import qualified Data.Serialize as Serialize-import qualified Data.Text as T-import qualified Data.Text.Encoding as T-import qualified Data.Text.IO as T-import qualified Network.HTTP.Conduit as HTTP-import qualified Network.HTTP.Types as HTTP-import qualified Text.XML as XML-import qualified Text.XML.Cursor as Cu+import Text.XML.Cursor hiding (force, forceM)+import qualified Blaze.ByteString.Builder as Blaze+import qualified Control.Exception as E+import qualified Control.Failure as F+import qualified Crypto.Classes as Crypto+import qualified Crypto.HMAC as HMAC+import qualified Crypto.Hash.MD5 as MD5+import qualified Crypto.Hash.SHA1 as SHA1+import qualified Crypto.Hash.SHA256 as SHA256+import qualified Data.ByteString as B+import qualified Data.ByteString.Base64 as Base64+import qualified Data.ByteString.Lazy as L+import qualified Data.ByteString.UTF8 as BU+import qualified Data.Conduit as C+import qualified Data.Conduit.List as CL+import qualified Data.Serialize as Serialize+import qualified Data.Text as T+import qualified Data.Text.Encoding as T+import qualified Data.Text.IO as T+import qualified Network.HTTP.Conduit as HTTP+import qualified Network.HTTP.Types as HTTP+import qualified Text.XML as XML+import qualified Text.XML.Cursor as Cu -- | A response with metadata. Can also contain an error response, or an internal error, via 'Attempt'. -- @@ -137,7 +138,7 @@ -- | A full HTTP response parser. Takes HTTP status, response headers, and response body. type HTTPResponseConsumer a = HTTP.Status -> HTTP.ResponseHeaders- -> Source (ResourceT IO) ByteString+ -> C.ResumableSource (ResourceT IO) ByteString -> ResourceT IO a -- | Class for types that AWS HTTP responses can be parsed into.@@ -156,7 +157,7 @@ instance ResponseConsumer r (HTTP.Response L.ByteString) where type ResponseMetadata (HTTP.Response L.ByteString) = () responseConsumer _ _ status headers bufsource = do- chunks <- bufsource $$ CL.consume+ chunks <- bufsource $$+- CL.consume return (HTTP.Response status HTTP.http11 headers $ L.fromChunks chunks) -- | Associates a request type and a response type in a bi-directional way.@@ -290,7 +291,7 @@ -- | Request body content type. , sqContentType :: Maybe B.ByteString -- | Request body content MD5.- , sqContentMd5 :: Maybe B.ByteString+ , sqContentMd5 :: Maybe MD5.MD5 -- | Additional Amazon "amz" headers. , sqAmzHeaders :: HTTP.RequestHeaders -- | Additional non-"amz" headers.@@ -316,7 +317,7 @@ , HTTP.queryString = HTTP.renderQuery False sqQuery , HTTP.requestHeaders = catMaybes [fmap (\d -> ("Date", fmtRfc822Time d)) sqDate , fmap (\c -> ("Content-Type", c)) contentType- , fmap (\md5 -> ("Content-MD5", md5)) sqContentMd5+ , fmap (\md5 -> ("Content-MD5", Serialize.encode md5)) sqContentMd5 , fmap (\auth -> ("Authorization", auth)) sqAuthorization] ++ sqAmzHeaders ++ sqOtherHeaders@@ -559,7 +560,7 @@ -> IORef m -> HTTPResponseConsumer a xmlCursorConsumer parse metadataRef _status _headers source- = do doc <- source $$ XML.sinkDoc XML.def+ = do doc <- source $$+- XML.sinkDoc XML.def let cursor = Cu.fromDocument doc let Response metadata x = parse cursor liftIO $ tellMetadataRef metadataRef metadata
Aws/S3/Commands/GetBucket.hs view
@@ -5,15 +5,15 @@ import Aws.Core import Aws.S3.Core import Control.Applicative-import Control.Arrow (second)-import Data.ByteString.Char8 ({- IsString -})+import Data.ByteString.Char8 ({- IsString -}) import Data.Maybe-import Text.XML.Cursor (($/), (&|), (&//))-import qualified Data.Text as T-import qualified Data.Text.Encoding as T+import Text.XML.Cursor (($/), (&|), (&//))+import qualified Data.ByteString.Char8 as B8+import qualified Data.Text as T+import qualified Data.Text.Encoding as T import qualified Data.Traversable-import qualified Network.HTTP.Types as HTTP-import qualified Text.XML.Cursor as Cu+import qualified Network.HTTP.Types as HTTP+import qualified Text.XML.Cursor as Cu data GetBucket = GetBucket {@@ -55,8 +55,8 @@ , s3QBucket = Just $ T.encodeUtf8 gbBucket , s3QObject = Nothing , s3QSubresources = []- , s3QQuery = HTTP.simpleQueryToQuery $ map (second T.encodeUtf8) $ catMaybes [- ("delimiter",) <$> gbDelimiter+ , s3QQuery = HTTP.toQuery [+ ("delimiter" :: B8.ByteString ,) <$> gbDelimiter , ("marker",) <$> gbMarker , ("max-keys",) . T.pack . show <$> gbMaxKeys , ("prefix",) <$> gbPrefix
Aws/S3/Commands/GetObject.hs view
@@ -5,9 +5,8 @@ import Aws.Core import Aws.S3.Core import Control.Applicative-import Control.Arrow (second) import Data.ByteString.Char8 ({- IsString -})-import Data.Maybe+import qualified Data.ByteString.Char8 as B8 import qualified Data.Text as T import qualified Data.Text.Encoding as T import qualified Network.HTTP.Types as HTTP@@ -17,6 +16,7 @@ goBucket :: Bucket , goObjectName :: Object , goResponseConsumer :: HTTPResponseConsumer a+ , goVersionId :: Maybe T.Text , goResponseContentType :: Maybe T.Text , goResponseContentLanguage :: Maybe T.Text , goResponseExpires :: Maybe T.Text@@ -26,7 +26,7 @@ } getObject :: Bucket -> T.Text -> HTTPResponseConsumer a -> GetObject a-getObject b o i = GetObject b o i Nothing Nothing Nothing Nothing Nothing Nothing+getObject b o i = GetObject b o i Nothing Nothing Nothing Nothing Nothing Nothing Nothing data GetObjectResponse a = GetObjectResponse ObjectMetadata a@@ -39,9 +39,11 @@ s3QMethod = Get , s3QBucket = Just $ T.encodeUtf8 goBucket , s3QObject = Just $ T.encodeUtf8 goObjectName- , s3QSubresources = []- , s3QQuery = HTTP.simpleQueryToQuery $ map (second T.encodeUtf8) $ catMaybes [- ("response-content-type",) <$> goResponseContentType+ , s3QSubresources = HTTP.toQuery [+ ("versionId" :: B8.ByteString,) <$> goVersionId+ ]+ , s3QQuery = HTTP.toQuery [+ ("response-content-type" :: B8.ByteString,) <$> goResponseContentType , ("response-content-language",) <$> goResponseContentLanguage , ("response-expires",) <$> goResponseExpires , ("response-cache-control",) <$> goResponseCacheControl@@ -58,8 +60,8 @@ instance ResponseConsumer (GetObject a) (GetObjectResponse a) where type ResponseMetadata (GetObjectResponse a) = S3Metadata responseConsumer GetObject{..} metadata status headers source- = GetObjectResponse - <$> parseObjectMetadata headers - <*> s3BinaryResponseConsumer goResponseConsumer metadata status headers source+ = do rsp <- s3BinaryResponseConsumer goResponseConsumer metadata status headers source+ om <- parseObjectMetadata headers+ return $ GetObjectResponse om rsp instance Transaction (GetObject a) (GetObjectResponse a)
Aws/S3/Commands/PutBucket.hs view
@@ -4,6 +4,7 @@ import Aws.Core import Aws.S3.Core import Control.Monad+import qualified Data.Map as M import qualified Data.Text as T import qualified Data.Text.Encoding as T import qualified Network.HTTP.Conduit as HTTP@@ -48,11 +49,11 @@ }) where root = XML.Element { XML.elementName = "{http://s3.amazonaws.com/doc/2006-03-01/}CreateBucketConfiguration"- , XML.elementAttributes = []+ , XML.elementAttributes = M.empty , XML.elementNodes = [ XML.NodeElement (XML.Element { XML.elementName = "{http://s3.amazonaws.com/doc/2006-03-01/}LocationConstraint"- , XML.elementAttributes = []+ , XML.elementAttributes = M.empty , XML.elementNodes = [XML.NodeContent pbLocationConstraint] }) ]
Aws/S3/Commands/PutObject.hs view
@@ -5,15 +5,16 @@ import Aws.Core import Aws.S3.Core import Control.Applicative-import Control.Arrow (second)-import Data.ByteString.Char8 ({- IsString -})+import Control.Arrow (second)+import Data.ByteString.Char8 ({- IsString -}) import Data.Maybe-import qualified Data.ByteString.Char8 as B-import qualified Data.CaseInsensitive as CI-import qualified Data.Text as T-import qualified Data.Text.Encoding as T-import qualified Network.HTTP.Conduit as HTTP-import qualified Data.Conduit as C+import qualified Crypto.Hash.MD5 as MD5+import qualified Data.ByteString.Char8 as B+import qualified Data.CaseInsensitive as CI+import qualified Data.Conduit as C+import qualified Data.Text as T+import qualified Data.Text.Encoding as T+import qualified Network.HTTP.Conduit as HTTP data PutObject = PutObject { poObjectName :: T.Text,@@ -22,7 +23,7 @@ poCacheControl :: Maybe T.Text, poContentDisposition :: Maybe T.Text, poContentEncoding :: Maybe T.Text,- poContentMD5 :: Maybe B.ByteString,+ poContentMD5 :: Maybe MD5.MD5, poExpires :: Maybe Int, poAcl :: Maybe CannedAcl, poStorageClass :: Maybe StorageClass,@@ -30,8 +31,8 @@ poMetadata :: [(T.Text,T.Text)] } -putObject :: T.Text -> Bucket -> HTTP.RequestBody (C.ResourceT IO) -> PutObject-putObject obj bucket body = PutObject obj bucket Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing body []+putObject :: Bucket -> T.Text -> HTTP.RequestBody (C.ResourceT IO) -> PutObject+putObject bucket obj body = PutObject obj bucket Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing body [] data PutObjectResponse = PutObjectResponse {
Aws/S3/Core.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DeriveDataTypeable, OverloadedStrings, RecordWildCards, FlexibleContexts #-}+{-# LANGUAGE DeriveDataTypeable, OverloadedStrings, RecordWildCards, FlexibleContexts, Rank2Types #-} module Aws.S3.Core where import Aws.Core@@ -6,7 +6,7 @@ import Control.Monad import Control.Monad.IO.Class import Data.Attempt (Attempt(..))-import Data.Conduit (($$))+import Data.Conduit (($$+-)) import Data.Function import Data.IORef import Data.List@@ -20,10 +20,12 @@ import qualified Blaze.ByteString.Builder.Char8 as Blaze8 import qualified Control.Exception as C import qualified Control.Failure as F+import qualified Crypto.Hash.MD5 as MD5 import qualified Data.ByteString as B import qualified Data.ByteString.Char8 as B8 import qualified Data.CaseInsensitive as CI import qualified Data.Conduit as C+import qualified Data.Serialize as Serialize import qualified Data.Text as T import qualified Data.Text.Encoding as T import qualified Network.HTTP.Conduit as HTTP@@ -121,7 +123,7 @@ , s3QSubresources :: HTTP.Query , s3QQuery :: HTTP.Query , s3QContentType :: Maybe B.ByteString- , s3QContentMd5 :: Maybe B.ByteString+ , s3QContentMd5 :: Maybe MD5.MD5 , s3QAmzHeaders :: HTTP.RequestHeaders , s3QOtherHeaders :: HTTP.RequestHeaders , s3QRequestBody :: Maybe (HTTP.RequestBody (C.ResourceT IO))@@ -144,7 +146,7 @@ , sqHost = B.intercalate "." $ catMaybes host , sqPort = s3Port , sqPath = mconcat $ catMaybes path- , sqQuery = sortedSubresources ++ s3QQuery ++ authQuery+ , sqQuery = sortedSubresources ++ s3QQuery ++ authQuery :: HTTP.Query , sqDate = Just signatureTime , sqAuthorization = authorization , sqContentType = s3QContentType@@ -176,7 +178,7 @@ sig = signature signatureCredentials HmacSHA1 stringToSign stringToSign = Blaze.toByteString . mconcat . intersperse (Blaze8.fromChar '\n') . concat $ [[Blaze.copyByteString $ httpMethod s3QMethod]- , [maybe mempty Blaze.copyByteString s3QContentMd5]+ , [maybe mempty (Blaze.copyByteString . Serialize.encode) s3QContentMd5] , [maybe mempty Blaze.copyByteString s3QContentType] , [Blaze.copyByteString $ case ti of AbsoluteTimestamp time -> fmtRfc822Time time@@ -187,9 +189,9 @@ where amzHeader (k, v) = Blaze.copyByteString (CI.foldedCase k) `mappend` Blaze8.fromChar ':' `mappend` Blaze.copyByteString v (authorization, authQuery) = case ti of AbsoluteTimestamp _ -> (Just $ B.concat ["AWS ", accessKeyID signatureCredentials, ":", sig], [])- AbsoluteExpires time -> (Nothing, HTTP.simpleQueryToQuery $ makeAuthQuery time)+ AbsoluteExpires time -> (Nothing, HTTP.toQuery $ makeAuthQuery time) makeAuthQuery time- = [("Expires", fmtTimeEpochSeconds time)+ = [("Expires" :: B8.ByteString, fmtTimeEpochSeconds time) , ("AWSAccessKeyId", accessKeyID signatureCredentials) , ("SignatureMethod", "HmacSHA256") , ("Signature", sig)]@@ -222,7 +224,7 @@ s3ErrorResponseConsumer :: HTTPResponseConsumer a s3ErrorResponseConsumer status _headers source- = do doc <- source $$ XML.sinkDoc XML.def+ = do doc <- source $$+- XML.sinkDoc XML.def let cursor = Cu.fromDocument doc liftIO $ case parseError cursor of Success err -> C.monadThrow err
Aws/SimpleDb/Core.hs view
@@ -106,7 +106,7 @@ } where ah = HmacSHA256- q' = HTTP.simpleQueryToQuery . sort $ q ++ ("Version", "2009-04-15") : queryAuth+ q' = HTTP.toQuery . sort $ q ++ ("Version", "2009-04-15") : queryAuth ti = signatureTimeInfo sd cr = signatureCredentials sd queryAuth = [case ti of
Aws/Sqs/Core.hs view
@@ -6,7 +6,7 @@ import Control.Monad import Control.Monad.IO.Class import Data.Attempt (Attempt(..))-import Data.Conduit (($$))+import Data.Conduit (($$+-)) import Data.IORef import Data.List import Data.Maybe@@ -215,7 +215,7 @@ sqsErrorResponseConsumer :: HTTPResponseConsumer a sqsErrorResponseConsumer status _headers source- = do doc <- source $$ XML.sinkDoc XML.def+ = do doc <- source $$+- XML.sinkDoc XML.def let cursor = Cu.fromDocument doc liftIO $ case parseError cursor of Success err -> C.monadThrow err
Examples/GetObject.hs view
@@ -9,7 +9,7 @@ {- A small function to save the object's data into a file. -} saveObject :: Aws.HTTPResponseConsumer ()-saveObject status headers source = source $$ sinkFile "cloud-remote.pdf"+saveObject status headers source = source $$+- sinkFile "cloud-remote.pdf" main :: IO () main = do
+ Examples/SimpleDb.hs view
@@ -0,0 +1,25 @@+import qualified Aws+import qualified Aws.SimpleDb as Sdb+import Data.Attempt+import Control.Exception+import qualified Data.Text as T+import qualified Data.Text.IO as T++main :: IO ()+main = do+ {- Load configuration -}+ cfg <- Aws.baseConfiguration+ let sdbCfg = Aws.defaultConfiguration++ putStrLn "Making request..."++ {- Make request -}+ let req = Sdb.listDomains { Sdb.ldMaxNumberOfDomains = Just 10 }+ Aws.Response _metadata resp <- Aws.simpleAws cfg sdbCfg req+ + {- Analyze response -}+ case resp of+ Success (Sdb.ListDomainsResponse names _token) -> do+ putStrLn "First 10 domains:"+ mapM_ (T.putStrLn . T.cons '\t') names+ Failure err -> print (toException err)
README.org view
@@ -60,7 +60,7 @@ {- A small function to save the object's data into a file. -} saveObject :: Aws.HTTPResponseConsumer ()-saveObject status headers source = source $$ sinkFile "cloud-remote.pdf"+saveObject status headers source = source $$+- sinkFile "cloud-remote.pdf" main :: IO () main = do@@ -92,6 +92,26 @@ * Release Notes +** 0.7 series (planned)++Feature ideas:++- Change ServiceConfiguration concept so as to indicate in the type whether this is for URI-only requests (i.e.+ awsUri)++** 0.6 series++- 0.6.0+ - API Cleanup+ - General: Use Crypto.Hash.MD5.MD5 when a Content-MD5 hash is required, instead of ByteString.+ - S3: Made parameter order to S3.putObject consistent with S3.getObject.+ - Updated dependencies:+ - conduit 0.5 (as well as http-conduit 1.5 and xml-conduit 1.0).+ - http-types 0.7.+ - Minor changes.+ - Internal changes (notable for people who want to add more commands):+ - http-types' new 'QueryLike' interface allows creating query lists more conveniently.+ ** 0.5 series - 0.5.0 ::@@ -113,6 +133,7 @@ - 0.3.2 :: Add awsRef / simpleAwsRef request variants for those who prefer an =IORef= over a =Data.Attempt.Attempt= value. Also improve README and add simple example.+ * Resources - [[https://github.com/aristidb/aws][aws on Github]]
aws.cabal view
@@ -6,7 +6,7 @@ -- The package version. See the Haskell package versioning policy -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for -- standards guiding when and how versions should be incremented.-Version: 0.5.0+Version: 0.6.0 -- A short (one-line) description of the package. Synopsis: Amazon Web Services (AWS) for Haskell@@ -41,6 +41,7 @@ -- a README. Extra-source-files: README.org Examples/GetObject.hs+ Examples/SimpleDb.hs -- Constraint on the version of Cabal needed to build this package. Cabal-version: >=1.8@@ -95,14 +96,15 @@ bytestring == 0.9.*, case-insensitive >= 0.2 && < 0.5, cereal == 0.3.*,- conduit >= 0.4 && < 0.5,+ conduit >= 0.5 && < 0.6,+ containers >= 0.4, crypto-api >= 0.9, cryptohash >= 0.6 && < 0.8, directory >= 1.0 && < 1.2, failure >= 0.1.0.1 && < 0.3, filepath >= 1.1 && < 1.4,- http-conduit >= 1.4 && < 1.5,- http-types >= 0.6 && < 0.7,+ http-conduit >= 1.5 && < 1.6,+ http-types >= 0.7 && < 0.8, lifted-base == 0.1.*, mtl == 2.*, monad-control >= 0.3,@@ -111,7 +113,7 @@ time >= 1.1.4 && < 1.5, transformers >= 0.2.2.0 && < 0.4, utf8-string == 0.3.*,- xml-conduit >= 0.7.0+ xml-conduit >= 1.0.1 && <1.1 GHC-Options: -Wall