hal 1.0.1 → 1.1
raw patch · 6 files changed
+36/−14 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- AWS.Lambda.Context: [$sel:appPackageName:ClientApplication] :: ClientApplication -> Text
- AWS.Lambda.Context: [$sel:appTitle:ClientApplication] :: ClientApplication -> Text
- AWS.Lambda.Context: [$sel:appVersionCode:ClientApplication] :: ClientApplication -> Text
- AWS.Lambda.Context: [$sel:appVersionName:ClientApplication] :: ClientApplication -> Text
- AWS.Lambda.Context: [$sel:awsRequestId:LambdaContext] :: LambdaContext -> Text
- AWS.Lambda.Context: [$sel:client:ClientContext] :: ClientContext -> ClientApplication
- AWS.Lambda.Context: [$sel:clientContext:LambdaContext] :: LambdaContext -> Maybe ClientContext
- AWS.Lambda.Context: [$sel:custom:ClientContext] :: ClientContext -> Map Text Text
- AWS.Lambda.Context: [$sel:deadline:LambdaContext] :: LambdaContext -> UTCTime
- AWS.Lambda.Context: [$sel:environment:ClientContext] :: ClientContext -> Map Text Text
- AWS.Lambda.Context: [$sel:functionMemorySize:LambdaContext] :: LambdaContext -> Int
- AWS.Lambda.Context: [$sel:functionName:LambdaContext] :: LambdaContext -> Text
- AWS.Lambda.Context: [$sel:functionVersion:LambdaContext] :: LambdaContext -> Text
- AWS.Lambda.Context: [$sel:identity:LambdaContext] :: LambdaContext -> Maybe CognitoIdentity
- AWS.Lambda.Context: [$sel:identityId:CognitoIdentity] :: CognitoIdentity -> Text
- AWS.Lambda.Context: [$sel:identityPoolId:CognitoIdentity] :: CognitoIdentity -> Text
- AWS.Lambda.Context: [$sel:invokedFunctionArn:LambdaContext] :: LambdaContext -> Text
- AWS.Lambda.Context: [$sel:logGroupName:LambdaContext] :: LambdaContext -> Text
- AWS.Lambda.Context: [$sel:logStreamName:LambdaContext] :: LambdaContext -> Text
- AWS.Lambda.Context: [$sel:xRayTraceId:LambdaContext] :: LambdaContext -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:accessKey:Identity] :: Identity -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:accountId:Identity] :: Identity -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:accountId:RequestContext] :: RequestContext a -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:apiId:RequestContext] :: RequestContext a -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:apiKey:Identity] :: Identity -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:apiKeyId:Identity] :: Identity -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:authorizer:RequestContext] :: RequestContext a -> Maybe a
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:body:ProxyRequest] :: ProxyRequest a -> ByteString
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:caller:Identity] :: Identity -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:cognitoAuthenticationProvider:Identity] :: Identity -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:cognitoAuthenticationType:Identity] :: Identity -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:cognitoIdentityId:Identity] :: Identity -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:cognitoIdentityPoolId:Identity] :: Identity -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:domainName:RequestContext] :: RequestContext a -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:domainPrefix:RequestContext] :: RequestContext a -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:extendedRequestId:RequestContext] :: RequestContext a -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:headers:ProxyRequest] :: ProxyRequest a -> HashMap (CI Text) Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:httpMethod:ProxyRequest] :: ProxyRequest a -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:httpMethod:RequestContext] :: RequestContext a -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:identity:RequestContext] :: RequestContext a -> Identity
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:multiValueHeaders:ProxyRequest] :: ProxyRequest a -> HashMap (CI Text) [Text]
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:multiValueQueryStringParameters:ProxyRequest] :: ProxyRequest a -> HashMap Text [Text]
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:path:ProxyRequest] :: ProxyRequest a -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:path:RequestContext] :: RequestContext a -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:pathParameters:ProxyRequest] :: ProxyRequest a -> HashMap Text Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:queryStringParameters:ProxyRequest] :: ProxyRequest a -> HashMap Text Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:requestContext:ProxyRequest] :: ProxyRequest a -> RequestContext a
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:requestId:RequestContext] :: RequestContext a -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:resource:ProxyRequest] :: ProxyRequest a -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:resourceId:RequestContext] :: RequestContext a -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:resourcePath:RequestContext] :: RequestContext a -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:sourceIp:Identity] :: Identity -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:stage:RequestContext] :: RequestContext a -> Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:stageVariables:ProxyRequest] :: ProxyRequest a -> HashMap Text Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:user:Identity] :: Identity -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:userAgent:Identity] :: Identity -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyRequest: [$sel:userArn:Identity] :: Identity -> Maybe Text
- AWS.Lambda.Events.ApiGateway.ProxyResponse: [$sel:body:ProxyResponse] :: ProxyResponse -> ProxyBody
- AWS.Lambda.Events.ApiGateway.ProxyResponse: [$sel:contentType:ProxyBody] :: ProxyBody -> Text
- AWS.Lambda.Events.ApiGateway.ProxyResponse: [$sel:isBase64Encoded:ProxyBody] :: ProxyBody -> Bool
- AWS.Lambda.Events.ApiGateway.ProxyResponse: [$sel:multiValueHeaders:ProxyResponse] :: ProxyResponse -> HashMap (CI Text) [Text]
- AWS.Lambda.Events.ApiGateway.ProxyResponse: [$sel:serialized:ProxyBody] :: ProxyBody -> Text
- AWS.Lambda.Events.ApiGateway.ProxyResponse: [$sel:status:ProxyResponse] :: ProxyResponse -> Status
- AWS.Lambda.Events.EventBridge: [$sel:account:EventBridgeEvent] :: EventBridgeEvent' a -> Text
- AWS.Lambda.Events.EventBridge: [$sel:detail:EventBridgeEvent] :: EventBridgeEvent' a -> a
- AWS.Lambda.Events.EventBridge: [$sel:detailType:EventBridgeEvent] :: EventBridgeEvent' a -> Text
- AWS.Lambda.Events.EventBridge: [$sel:id:EventBridgeEvent] :: EventBridgeEvent' a -> Text
- AWS.Lambda.Events.EventBridge: [$sel:region:EventBridgeEvent] :: EventBridgeEvent' a -> Text
- AWS.Lambda.Events.EventBridge: [$sel:resources:EventBridgeEvent] :: EventBridgeEvent' a -> [Text]
- AWS.Lambda.Events.EventBridge: [$sel:source:EventBridgeEvent] :: EventBridgeEvent' a -> Text
- AWS.Lambda.Events.EventBridge: [$sel:time:EventBridgeEvent] :: EventBridgeEvent' a -> UTCTime
- AWS.Lambda.Events.EventBridge: [$sel:version:EventBridgeEvent] :: EventBridgeEvent' a -> Text
- AWS.Lambda.Events.EventBridge.Detail.SSM.ParameterStoreChange: [$sel:description:ParameterStoreChange] :: ParameterStoreChange -> Maybe Text
- AWS.Lambda.Events.EventBridge.Detail.SSM.ParameterStoreChange: [$sel:name:ParameterStoreChange] :: ParameterStoreChange -> Text
- AWS.Lambda.Events.EventBridge.Detail.SSM.ParameterStoreChange: [$sel:operation:ParameterStoreChange] :: ParameterStoreChange -> Operation
- AWS.Lambda.Events.EventBridge.Detail.SSM.ParameterStoreChange: [$sel:type_:ParameterStoreChange] :: ParameterStoreChange -> Type
- AWS.Lambda.Events.Kafka: [$sel:bootstrapServers:KafkaEvent] :: KafkaEvent -> !NonEmpty Text
- AWS.Lambda.Events.Kafka: [$sel:eventSource:KafkaEvent] :: KafkaEvent -> !EventSource
- AWS.Lambda.Events.Kafka: [$sel:eventSourceArn:KafkaEvent] :: KafkaEvent -> !Maybe Text
- AWS.Lambda.Events.Kafka: [$sel:headers:Record] :: Record' a -> [Header]
- AWS.Lambda.Events.Kafka: [$sel:key:Record] :: Record' a -> !Maybe ByteString
- AWS.Lambda.Events.Kafka: [$sel:offset:Record] :: Record' a -> !Int64
- AWS.Lambda.Events.Kafka: [$sel:partition:Record] :: Record' a -> !Int32
- AWS.Lambda.Events.Kafka: [$sel:records:KafkaEvent] :: KafkaEvent -> !Map Text [Record]
- AWS.Lambda.Events.Kafka: [$sel:timestamp:Record] :: Record' a -> !Timestamp
- AWS.Lambda.Events.Kafka: [$sel:topic:Record] :: Record' a -> !Text
- AWS.Lambda.Events.Kafka: [$sel:value:Record] :: Record' a -> !Maybe a
- AWS.Lambda.Events.Kafka: instance Data.Aeson.Types.FromJSON.FromJSON (AWS.Lambda.Events.Kafka.Record' Data.ByteString.Internal.ByteString)
- AWS.Lambda.Events.Kafka: instance Data.Aeson.Types.ToJSON.ToJSON (AWS.Lambda.Events.Kafka.Record' Data.ByteString.Internal.ByteString)
- AWS.Lambda.Events.S3: [$sel:amazonId:ResponseElements] :: ResponseElements -> Text
- AWS.Lambda.Events.S3: [$sel:amazonRequestId:ResponseElements] :: ResponseElements -> Text
- AWS.Lambda.Events.S3: [$sel:arn:S3Bucket] :: S3Bucket -> Text
- AWS.Lambda.Events.S3: [$sel:awsRegion:S3Event] :: S3Event -> Text
- AWS.Lambda.Events.S3: [$sel:bucket:S3Config] :: S3Config -> S3Bucket
- AWS.Lambda.Events.S3: [$sel:configurationId:S3Config] :: S3Config -> Text
- AWS.Lambda.Events.S3: [$sel:eTag:PutObject] :: S3Object -> Text
- AWS.Lambda.Events.S3: [$sel:eventName:S3Event] :: S3Event -> Text
- AWS.Lambda.Events.S3: [$sel:eventSource:S3Event] :: S3Event -> Text
- AWS.Lambda.Events.S3: [$sel:eventTime:S3Event] :: S3Event -> UTCTime
- AWS.Lambda.Events.S3: [$sel:eventVersion:S3Event] :: S3Event -> Text
- AWS.Lambda.Events.S3: [$sel:key:PutObject] :: S3Object -> Text
- AWS.Lambda.Events.S3: [$sel:name:S3Bucket] :: S3Bucket -> Text
- AWS.Lambda.Events.S3: [$sel:object:S3Config] :: S3Config -> S3Object
- AWS.Lambda.Events.S3: [$sel:ownerIdentity:S3Bucket] :: S3Bucket -> PrincipalIdentity
- AWS.Lambda.Events.S3: [$sel:principalId:PrincipalIdentity] :: PrincipalIdentity -> Text
- AWS.Lambda.Events.S3: [$sel:records:Records] :: Records -> [S3Event]
- AWS.Lambda.Events.S3: [$sel:requestParameters:S3Event] :: S3Event -> RequestParameters
- AWS.Lambda.Events.S3: [$sel:responseElements:S3Event] :: S3Event -> ResponseElements
- AWS.Lambda.Events.S3: [$sel:s3:S3Event] :: S3Event -> S3Config
- AWS.Lambda.Events.S3: [$sel:s3SchemaVersion:S3Config] :: S3Config -> Text
- AWS.Lambda.Events.S3: [$sel:sequencer:PutObject] :: S3Object -> Text
- AWS.Lambda.Events.S3: [$sel:size:PutObject] :: S3Object -> Int
- AWS.Lambda.Events.S3: [$sel:sourceIPAddress:RequestParameters] :: RequestParameters -> Text
- AWS.Lambda.Events.S3: [$sel:userIdentity:S3Event] :: S3Event -> PrincipalIdentity
- AWS.Lambda.Events.SQS: [$sel:approximateFirstReceiveTimestamp:Attributes] :: Attributes -> Text
- AWS.Lambda.Events.SQS: [$sel:approximateReceiveCount:Attributes] :: Attributes -> Text
- AWS.Lambda.Events.SQS: [$sel:attributes:SQSEvent] :: SQSEvent -> Attributes
- AWS.Lambda.Events.SQS: [$sel:awsRegion:SQSEvent] :: SQSEvent -> Text
- AWS.Lambda.Events.SQS: [$sel:body:SQSEvent] :: SQSEvent -> Text
- AWS.Lambda.Events.SQS: [$sel:eventSource:SQSEvent] :: SQSEvent -> Text
- AWS.Lambda.Events.SQS: [$sel:eventSourceARN:SQSEvent] :: SQSEvent -> Text
- AWS.Lambda.Events.SQS: [$sel:md5OfBody:SQSEvent] :: SQSEvent -> Text
- AWS.Lambda.Events.SQS: [$sel:messageAttributes:SQSEvent] :: SQSEvent -> Map Text Text
- AWS.Lambda.Events.SQS: [$sel:messageId:SQSEvent] :: SQSEvent -> Text
- AWS.Lambda.Events.SQS: [$sel:receiptHandle:SQSEvent] :: SQSEvent -> Text
- AWS.Lambda.Events.SQS: [$sel:records:Records] :: Records -> [SQSEvent]
- AWS.Lambda.Events.SQS: [$sel:senderId:Attributes] :: Attributes -> Text
- AWS.Lambda.Events.SQS: [$sel:sentTimestamp:Attributes] :: Attributes -> Text
- AWS.Lambda.Internal: [$sel:awsRequestId:DynamicContext] :: DynamicContext -> Text
- AWS.Lambda.Internal: [$sel:clientContext:DynamicContext] :: DynamicContext -> Maybe ClientContext
- AWS.Lambda.Internal: [$sel:deadline:DynamicContext] :: DynamicContext -> UTCTime
- AWS.Lambda.Internal: [$sel:functionMemorySize:StaticContext] :: StaticContext -> Int
- AWS.Lambda.Internal: [$sel:functionName:StaticContext] :: StaticContext -> Text
- AWS.Lambda.Internal: [$sel:functionVersion:StaticContext] :: StaticContext -> Text
- AWS.Lambda.Internal: [$sel:identity:DynamicContext] :: DynamicContext -> Maybe CognitoIdentity
- AWS.Lambda.Internal: [$sel:invokedFunctionArn:DynamicContext] :: DynamicContext -> Text
- AWS.Lambda.Internal: [$sel:logGroupName:StaticContext] :: StaticContext -> Text
- AWS.Lambda.Internal: [$sel:logStreamName:StaticContext] :: StaticContext -> Text
- AWS.Lambda.Internal: [$sel:xRayTraceId:DynamicContext] :: DynamicContext -> Text
+ AWS.Lambda.Combinators: withFallibleParse :: FromJSON a => (a -> b) -> Value -> Either String b
+ AWS.Lambda.Context: [appPackageName] :: ClientApplication -> Text
+ AWS.Lambda.Context: [appTitle] :: ClientApplication -> Text
+ AWS.Lambda.Context: [appVersionCode] :: ClientApplication -> Text
+ AWS.Lambda.Context: [appVersionName] :: ClientApplication -> Text
+ AWS.Lambda.Context: [awsRequestId] :: LambdaContext -> Text
+ AWS.Lambda.Context: [clientContext] :: LambdaContext -> Maybe ClientContext
+ AWS.Lambda.Context: [client] :: ClientContext -> ClientApplication
+ AWS.Lambda.Context: [custom] :: ClientContext -> Map Text Text
+ AWS.Lambda.Context: [deadline] :: LambdaContext -> UTCTime
+ AWS.Lambda.Context: [environment] :: ClientContext -> Map Text Text
+ AWS.Lambda.Context: [functionMemorySize] :: LambdaContext -> Int
+ AWS.Lambda.Context: [functionName] :: LambdaContext -> Text
+ AWS.Lambda.Context: [functionVersion] :: LambdaContext -> Text
+ AWS.Lambda.Context: [identityId] :: CognitoIdentity -> Text
+ AWS.Lambda.Context: [identityPoolId] :: CognitoIdentity -> Text
+ AWS.Lambda.Context: [identity] :: LambdaContext -> Maybe CognitoIdentity
+ AWS.Lambda.Context: [invokedFunctionArn] :: LambdaContext -> Text
+ AWS.Lambda.Context: [logGroupName] :: LambdaContext -> Text
+ AWS.Lambda.Context: [logStreamName] :: LambdaContext -> Text
+ AWS.Lambda.Context: [xRayTraceId] :: LambdaContext -> Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [accessKey] :: Identity -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [accountId] :: Identity -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [apiId] :: RequestContext a -> Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [apiKeyId] :: Identity -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [apiKey] :: Identity -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [authorizer] :: RequestContext a -> Maybe a
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [body] :: ProxyRequest a -> ByteString
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [caller] :: Identity -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [cognitoAuthenticationProvider] :: Identity -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [cognitoAuthenticationType] :: Identity -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [cognitoIdentityId] :: Identity -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [cognitoIdentityPoolId] :: Identity -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [domainName] :: RequestContext a -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [domainPrefix] :: RequestContext a -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [extendedRequestId] :: RequestContext a -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [headers] :: ProxyRequest a -> HashMap (CI Text) Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [httpMethod] :: RequestContext a -> Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [identity] :: RequestContext a -> Identity
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [multiValueHeaders] :: ProxyRequest a -> HashMap (CI Text) [Text]
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [multiValueQueryStringParameters] :: ProxyRequest a -> HashMap Text [Text]
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [pathParameters] :: ProxyRequest a -> HashMap Text Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [path] :: RequestContext a -> Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [queryStringParameters] :: ProxyRequest a -> HashMap Text Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [requestContext] :: ProxyRequest a -> RequestContext a
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [requestId] :: RequestContext a -> Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [resourceId] :: RequestContext a -> Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [resourcePath] :: RequestContext a -> Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [resource] :: ProxyRequest a -> Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [sourceIp] :: Identity -> Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [stageVariables] :: ProxyRequest a -> HashMap Text Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [stage] :: RequestContext a -> Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [userAgent] :: Identity -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [userArn] :: Identity -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyRequest: [user] :: Identity -> Maybe Text
+ AWS.Lambda.Events.ApiGateway.ProxyResponse: [body] :: ProxyResponse -> ProxyBody
+ AWS.Lambda.Events.ApiGateway.ProxyResponse: [contentType] :: ProxyBody -> Text
+ AWS.Lambda.Events.ApiGateway.ProxyResponse: [isBase64Encoded] :: ProxyBody -> Bool
+ AWS.Lambda.Events.ApiGateway.ProxyResponse: [multiValueHeaders] :: ProxyResponse -> HashMap (CI Text) [Text]
+ AWS.Lambda.Events.ApiGateway.ProxyResponse: [serialized] :: ProxyBody -> Text
+ AWS.Lambda.Events.ApiGateway.ProxyResponse: [status] :: ProxyResponse -> Status
+ AWS.Lambda.Events.EventBridge: [account] :: EventBridgeEvent' a -> Text
+ AWS.Lambda.Events.EventBridge: [detailType] :: EventBridgeEvent' a -> Text
+ AWS.Lambda.Events.EventBridge: [detail] :: EventBridgeEvent' a -> a
+ AWS.Lambda.Events.EventBridge: [id] :: EventBridgeEvent' a -> Text
+ AWS.Lambda.Events.EventBridge: [region] :: EventBridgeEvent' a -> Text
+ AWS.Lambda.Events.EventBridge: [resources] :: EventBridgeEvent' a -> [Text]
+ AWS.Lambda.Events.EventBridge: [source] :: EventBridgeEvent' a -> Text
+ AWS.Lambda.Events.EventBridge: [time] :: EventBridgeEvent' a -> UTCTime
+ AWS.Lambda.Events.EventBridge: [version] :: EventBridgeEvent' a -> Text
+ AWS.Lambda.Events.EventBridge.Detail.SSM.ParameterStoreChange: [description] :: ParameterStoreChange -> Maybe Text
+ AWS.Lambda.Events.EventBridge.Detail.SSM.ParameterStoreChange: [name] :: ParameterStoreChange -> Text
+ AWS.Lambda.Events.EventBridge.Detail.SSM.ParameterStoreChange: [operation] :: ParameterStoreChange -> Operation
+ AWS.Lambda.Events.EventBridge.Detail.SSM.ParameterStoreChange: [type_] :: ParameterStoreChange -> Type
+ AWS.Lambda.Events.Kafka: [bootstrapServers] :: KafkaEvent -> !NonEmpty Text
+ AWS.Lambda.Events.Kafka: [eventSourceArn] :: KafkaEvent -> !Maybe Text
+ AWS.Lambda.Events.Kafka: [eventSource] :: KafkaEvent -> !EventSource
+ AWS.Lambda.Events.Kafka: [headers] :: Record' a -> [Header]
+ AWS.Lambda.Events.Kafka: [key] :: Record' a -> !Maybe ByteString
+ AWS.Lambda.Events.Kafka: [offset] :: Record' a -> !Int64
+ AWS.Lambda.Events.Kafka: [partition] :: Record' a -> !Int32
+ AWS.Lambda.Events.Kafka: [records] :: KafkaEvent -> !Map Text [Record]
+ AWS.Lambda.Events.Kafka: [timestamp] :: Record' a -> !Timestamp
+ AWS.Lambda.Events.Kafka: [topic] :: Record' a -> !Text
+ AWS.Lambda.Events.Kafka: [value] :: Record' a -> !Maybe a
+ AWS.Lambda.Events.Kafka: instance Data.Aeson.Types.FromJSON.FromJSON (AWS.Lambda.Events.Kafka.Record' Data.ByteString.Internal.Type.ByteString)
+ AWS.Lambda.Events.Kafka: instance Data.Aeson.Types.ToJSON.ToJSON (AWS.Lambda.Events.Kafka.Record' Data.ByteString.Internal.Type.ByteString)
+ AWS.Lambda.Events.S3: [amazonId] :: ResponseElements -> Text
+ AWS.Lambda.Events.S3: [amazonRequestId] :: ResponseElements -> Text
+ AWS.Lambda.Events.S3: [arn] :: S3Bucket -> Text
+ AWS.Lambda.Events.S3: [awsRegion] :: S3Event -> Text
+ AWS.Lambda.Events.S3: [bucket] :: S3Config -> S3Bucket
+ AWS.Lambda.Events.S3: [configurationId] :: S3Config -> Text
+ AWS.Lambda.Events.S3: [eTag] :: S3Object -> Text
+ AWS.Lambda.Events.S3: [eventName] :: S3Event -> Text
+ AWS.Lambda.Events.S3: [eventSource] :: S3Event -> Text
+ AWS.Lambda.Events.S3: [eventTime] :: S3Event -> UTCTime
+ AWS.Lambda.Events.S3: [eventVersion] :: S3Event -> Text
+ AWS.Lambda.Events.S3: [key] :: S3Object -> Text
+ AWS.Lambda.Events.S3: [name] :: S3Bucket -> Text
+ AWS.Lambda.Events.S3: [object] :: S3Config -> S3Object
+ AWS.Lambda.Events.S3: [ownerIdentity] :: S3Bucket -> PrincipalIdentity
+ AWS.Lambda.Events.S3: [principalId] :: PrincipalIdentity -> Text
+ AWS.Lambda.Events.S3: [records] :: Records -> [S3Event]
+ AWS.Lambda.Events.S3: [requestParameters] :: S3Event -> RequestParameters
+ AWS.Lambda.Events.S3: [responseElements] :: S3Event -> ResponseElements
+ AWS.Lambda.Events.S3: [s3SchemaVersion] :: S3Config -> Text
+ AWS.Lambda.Events.S3: [s3] :: S3Event -> S3Config
+ AWS.Lambda.Events.S3: [sequencer] :: S3Object -> Text
+ AWS.Lambda.Events.S3: [size] :: S3Object -> Int
+ AWS.Lambda.Events.S3: [sourceIPAddress] :: RequestParameters -> Text
+ AWS.Lambda.Events.S3: [userIdentity] :: S3Event -> PrincipalIdentity
+ AWS.Lambda.Events.SQS: [approximateFirstReceiveTimestamp] :: Attributes -> Text
+ AWS.Lambda.Events.SQS: [approximateReceiveCount] :: Attributes -> Text
+ AWS.Lambda.Events.SQS: [attributes] :: SQSEvent -> Attributes
+ AWS.Lambda.Events.SQS: [awsRegion] :: SQSEvent -> Text
+ AWS.Lambda.Events.SQS: [body] :: SQSEvent -> Text
+ AWS.Lambda.Events.SQS: [eventSourceARN] :: SQSEvent -> Text
+ AWS.Lambda.Events.SQS: [eventSource] :: SQSEvent -> Text
+ AWS.Lambda.Events.SQS: [md5OfBody] :: SQSEvent -> Text
+ AWS.Lambda.Events.SQS: [messageAttributes] :: SQSEvent -> Map Text Text
+ AWS.Lambda.Events.SQS: [messageId] :: SQSEvent -> Text
+ AWS.Lambda.Events.SQS: [receiptHandle] :: SQSEvent -> Text
+ AWS.Lambda.Events.SQS: [records] :: Records -> [SQSEvent]
+ AWS.Lambda.Events.SQS: [senderId] :: Attributes -> Text
+ AWS.Lambda.Events.SQS: [sentTimestamp] :: Attributes -> Text
+ AWS.Lambda.Internal: [awsRequestId] :: DynamicContext -> Text
+ AWS.Lambda.Internal: [clientContext] :: DynamicContext -> Maybe ClientContext
+ AWS.Lambda.Internal: [deadline] :: DynamicContext -> UTCTime
+ AWS.Lambda.Internal: [functionMemorySize] :: StaticContext -> Int
+ AWS.Lambda.Internal: [functionName] :: StaticContext -> Text
+ AWS.Lambda.Internal: [functionVersion] :: StaticContext -> Text
+ AWS.Lambda.Internal: [identity] :: DynamicContext -> Maybe CognitoIdentity
+ AWS.Lambda.Internal: [invokedFunctionArn] :: DynamicContext -> Text
+ AWS.Lambda.Internal: [logGroupName] :: StaticContext -> Text
+ AWS.Lambda.Internal: [logStreamName] :: StaticContext -> Text
+ AWS.Lambda.Internal: [xRayTraceId] :: DynamicContext -> Text
- AWS.Lambda.Events.Kafka: unparseTimestamp :: KeyValue kv => Timestamp -> [kv]
+ AWS.Lambda.Events.Kafka: unparseTimestamp :: KeyValue e kv => Timestamp -> [kv]
Files
- CHANGELOG.md +14/−1
- hal.cabal +3/−3
- src/AWS/Lambda/Combinators.hs +6/−1
- src/AWS/Lambda/Context.hs +1/−1
- src/AWS/Lambda/Runtime.hs +8/−5
- src/AWS/Lambda/Runtime/Value.hs +4/−3
CHANGELOG.md view
@@ -5,7 +5,20 @@ The format is based on [Keep a Changelog][chg] and this project adheres to [Haskell's Package Versioning Policy][pvp] -## 1.0.1 - 2023-12-15+## `1.1` - 2023-12-18++ - `fallibleRuntime` and `fallibleRuntimeWithContext` report errors to AWS+ instead of returning `{"Left": "some error"}`.+ - `fallibleRuntime` and `fallibleRuntimeWithContext` no longer wrap their+ successful responses in `{"Right": ...}`.+ - `pureRuntime`, `pureRuntimeWithContext`, `fallibleRuntime` and `fallibleRuntimeWithContext`+ no longer crash the Lambda runtime if input can't be parsed from JSON.+ - By default, Aeson 2.2 is used. This a breaking change only for specific+ cases when using or maintaining curated package sets (stackage, nix, etc).+ Optionally, one can set the `use-aeson-2-2` flag to `false` to use an older+ verison.++## `1.0.1` - 2023-12-15 - Add support for aeson 2.2. Users can opt in by setting the `use-aeson-2-2` flag to `true`, which for many users will be set automatically. In a future breaking change release, this flag will default to `true`.
hal.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 135f92bc103710363cac34b23a95869b5a3cdf72e04a2e41652864d0d7559ff7+-- hash: 68071e7a76bb7ee4441cd578bc9de2a1c3ffb2622ab059ce676d816922ed3d4b name: hal-version: 1.0.1+version: 1.1 synopsis: A runtime environment for Haskell applications running on AWS Lambda. description: This library uniquely supports different types of AWS Lambda Handlers for your needs/comfort with advanced Haskell. Instead of exposing a single function@@ -32,7 +32,7 @@ flag use-aeson-2-2 description: Required parsers are split out into a different package manual: False- default: False+ default: True library exposed-modules:
src/AWS/Lambda/Combinators.hs view
@@ -13,7 +13,8 @@ module AWS.Lambda.Combinators ( withoutContext,- withInfallibleParse+ withInfallibleParse,+ withFallibleParse ) where import Data.Aeson (FromJSON, parseJSON, Value)@@ -70,3 +71,7 @@ -- on a failure to convert the JSON AST sent to the Lambda. withInfallibleParse :: FromJSON a => (a -> b) -> Value -> b withInfallibleParse fn = either error fn . parseEither parseJSON++-- | Like 'withInfallibleParse', but return the result in an 'Either' instead of using 'error'.+withFallibleParse :: FromJSON a => (a -> b) -> Value -> Either String b+withFallibleParse fn = fmap fn . parseEither parseJSON
src/AWS/Lambda/Context.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE NamedFieldPuns, OverloadedStrings #-}+{-# LANGUAGE NamedFieldPuns #-} {-| Module : AWS.Lambda.Context
src/AWS/Lambda/Runtime.hs view
@@ -29,9 +29,12 @@ mRuntimeWithContext ) where -import AWS.Lambda.Combinators (withInfallibleParse)+import AWS.Lambda.Combinators (withInfallibleParse,+ withFallibleParse,+ withoutContext) import AWS.Lambda.Context (LambdaContext(..)) import qualified AWS.Lambda.Runtime.Value as ValueRuntime+import Control.Monad (join) import Control.Monad.Catch (MonadCatch) import Control.Monad.IO.Class (MonadIO) import Control.Monad.Reader (ReaderT)@@ -253,7 +256,7 @@ -- @ fallibleRuntimeWithContext :: (FromJSON event, ToJSON result) => (LambdaContext -> event -> Either String result) -> IO ()-fallibleRuntimeWithContext = ValueRuntime.fallibleRuntimeWithContext . fmap withInfallibleParse+fallibleRuntimeWithContext fn = ValueRuntime.fallibleRuntimeWithContext $ \lc -> join . withFallibleParse (fn lc) -- | For pure functions that can still fail. --@@ -286,7 +289,7 @@ -- @ fallibleRuntime :: (FromJSON event, ToJSON result) => (event -> Either String result) -> IO ()-fallibleRuntime = ValueRuntime.fallibleRuntime . withInfallibleParse+fallibleRuntime = fallibleRuntimeWithContext . withoutContext -- | For pure functions that can never fail that also need access to the context. --@@ -318,7 +321,7 @@ -- @ pureRuntimeWithContext :: (FromJSON event, ToJSON result) => (LambdaContext -> event -> result) -> IO ()-pureRuntimeWithContext = ValueRuntime.pureRuntimeWithContext . fmap withInfallibleParse+pureRuntimeWithContext = fallibleRuntimeWithContext . fmap (fmap pure) -- | For pure functions that can never fail. --@@ -345,4 +348,4 @@ -- main = pureRuntime myHandler -- @ pureRuntime :: (FromJSON event, ToJSON result) => (event -> result) -> IO ()-pureRuntime = ValueRuntime.pureRuntime . withInfallibleParse+pureRuntime = pureRuntimeWithContext . withoutContext
src/AWS/Lambda/Runtime/Value.hs view
@@ -39,10 +39,11 @@ mRuntimeWithContext, ) where -import AWS.Lambda.RuntimeClient (RuntimeClientConfig, getRuntimeClientConfig,- getNextData, sendEventError, sendEventSuccess) import AWS.Lambda.Combinators (withoutContext) import AWS.Lambda.Context (LambdaContext(..))+import AWS.Lambda.RuntimeClient (RuntimeClientConfig, getNextData,+ getRuntimeClientConfig,+ sendEventError, sendEventSuccess) import Control.Exception (SomeException, displayException) import Control.Monad ((<=<), forever) import Control.Monad.Catch (MonadCatch, try)@@ -331,7 +332,7 @@ -- @ fallibleRuntimeWithContext :: ToJSON result => (LambdaContext -> Value -> Either String result) -> IO ()-fallibleRuntimeWithContext = mRuntimeWithContext . fmap (fmap pure)+fallibleRuntimeWithContext fn = mRuntimeWithContext (\lc -> either error pure . fn lc) -- | For pure functions that can still fail. --