h*Z<      !"#$%&'()*+,-./0123456789:;0.3.2.0(C) 2020-2022 Bellroy Pty Ltd BSD-3-Clause'Bellroy Tech Team  experimental Safe-Inferred "69:;<> !aws-arnA parsed ARN. Either use the  < , or the  and  functions to convert = <-> . The  part of an ARN will often contain colon- or slash-separated parts which precisely identify some resource. If there is no service-specific module (see below), the  and * optics in this module can pick apart the  field.4If you want lenses into individual fields, use the  0https://hackage.haskell.org/package/generic-lens generic-lens or  2https://hackage.haskell.org/package/generic-opticsgeneric-optics libraries.Service-Specific Modules Modules like Network.AWS.ARN.Lambda provide types to parse the resource part of an ARN into something more specific: -- Remark: Lambda._Function :: Prism' Text Lambda.Function -- Returns: Just "the-coolest-function-ever" let functionARN = "arn:aws:lambda:us-east-1:123456789012:function:the-coolest-function-ever:Alias" in functionARN ^? _ARN . #resource . Lambda._Function . #name You can also use 's > instance and  to create <(s that indicate their resource type in 's type variable:  . " Lambda._Function :: Prism' Text ( Lambda.Function) aws-arnaws-arnaws-arnaws-arnSplit a = into colon-separated parts.This is an improper ? (-Text.intercalate ":" . Text.splitOn ":" = id, but -Text.splitOn ":" . Text.intercalate ":" /= id"). This causes violations of the ?' laws for lists whose members contain ':':[":"] ^. from colons . colons["",""]*The laws are also violated on empty lists:[] ^. from colons . colons[""]!Nevertheless, it is still useful:'"foo:bar:baz" & colons . ix 1 .~ "quux""foo:quux:baz"Ed  https://old.reddit.com/r/haskell/comments/32xva8/the_laws_of_asymmetric_wellbehaved_lenses_are/cqhq1gk/discusses improper optics in an old Reddit comment.aws-arnSplit a = into slash-separated parts.List , this is an improper ?, but it is still useful:"foo/bar/baz" ^. slashes["foo","bar","baz"]  (C) 2020-2022 Bellroy Pty Ltd BSD-3-Clause'Bellroy Tech Team  experimental Safe-Inferred"<> aws-arnAn AWS Lambda function name, and optional alias/version qualifier.""function:helloworld" ^? _Function:Just (Function {name = "helloworld", qualifier = Nothing})*"function:helloworld:$LATEST" ^? _FunctionJust (Function {name = "helloworld", qualifier = Just "$LATEST"})%"function:helloworld:42" ^? _Function experimental Safe-Inferred"%'<>%aws-arn(An AWS S3 bucket, without an object key."bucket-name" ^? _Bucket*Just (Bucket {bucketName = "bucket-name"})""bucket-name/my/object" ^? _BucketNothinglet b = Bucket "my-bucket" in renderObject . Object b <$> ["obj1", "obj2"]#["my-bucket/obj1","my-bucket/obj2"](aws-arn5An AWS S3 object, made of a bucket and an object key.""bucket-name/my/object" ^? _ObjectJust (Object {bucket = Bucket {bucketName = "bucket-name"}, objectKey = "my/object"})"bucket-name" ^? _ObjectNothing-bucket <$> "bucket-name/my/object" ^? _Object*Just (Bucket {bucketName = "bucket-name"}),aws-arn-aws-arn.aws-arn/aws-arn0aws-arn1aws-arn ()*+,-%&'/0.1 ()*+,-%&'/0.1      !"#$%&'()**+,,-./0123456789:;<=>?@ABCDEFG?@H&aws-arn-0.3.2.0-2P538NTg0JO6KvclCynydBNetwork.AWS.ARNNetwork.AWS.ARN.LambdaNetwork.AWS.ARN.S3aws-arnControl.Lens.PrismbelowARN partitionserviceregionaccountresource$fEqARN$fOrdARN $fShowARN $fGenericARN$fGeneric1TYPEARN $fHashableARN $fFunctorARN $fFoldableARN$fTraversableARN$fEq1ARN $fOrd1ARNparseARN renderARN_ARNcolonsslashes $fShow1ARN$fHashable1ARNFunctionname qualifier parseFunctionrenderFunction _Function $fEqFunction $fOrdFunction$fHashableFunction$fShowFunction$fGenericFunctionBucket$sel:bucketName:BucketObject$sel:bucket:Object$sel:objectKey:Object parseObject renderObject_Object parseBucket renderBucket_Bucket $fEqObject $fOrdObject$fHashableObject $fShowObject$fGenericObject $fEqBucket $fOrdBucket $fShowBucket$fGenericBucket$fHashableBucket,microlens-pro-0.2.0.1-FQCqpwKGM4L1JAW3ngbcYiLens.Micro.Pro.TypePrism' text-2.0.2Data.Text.InternalTextbaseData.Traversable TraversableIso'