From c3c11fc31cb12d3beee62485029bbd52245081a4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Oct 2025 12:15:55 +0000 Subject: [PATCH 1/4] Initial plan From 8ae763f9253bf987bacdba81c3fc9b47e85e3039 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Oct 2025 12:24:10 +0000 Subject: [PATCH 2/4] Initial analysis and planning Co-authored-by: diskshima <2049613+diskshima@users.noreply.github.com> --- cabal.project.freeze | 238 ------------------------------------------- 1 file changed, 238 deletions(-) delete mode 100644 cabal.project.freeze diff --git a/cabal.project.freeze b/cabal.project.freeze deleted file mode 100644 index 4c9cfba..0000000 --- a/cabal.project.freeze +++ /dev/null @@ -1,238 +0,0 @@ -active-repositories: hackage.haskell.org:merge -constraints: any.Cabal ==3.14.1.0, - any.Cabal-syntax ==3.14.1.0, - any.HTTP ==4000.4.1, - HTTP -conduit10 +network-uri -warn-as-error -warp-tests, - any.OneTuple ==0.4.2, - any.QuickCheck ==2.16.0.0, - QuickCheck -old-random +templatehaskell, - any.RSA ==2.4.1, - any.SHA ==1.6.4.4, - SHA -exe, - any.StateVar ==1.2.2, - any.adjunctions ==4.4.3, - any.aeson ==2.2.3.0, - aeson +ordered-keymap, - any.aeson-casing ==0.2.0.0, - any.ansi-terminal ==1.1.3, - ansi-terminal -example, - any.ansi-terminal-types ==1.1.3, - any.appar ==0.1.8, - any.array ==0.5.8.0, - any.asn1-encoding ==0.9.6, - any.asn1-parse ==0.9.5, - any.asn1-types ==0.3.4, - any.assoc ==1.1.1, - assoc -tagged, - any.async ==2.2.5, - async -bench, - any.attoparsec ==0.14.4, - attoparsec -developer, - any.attoparsec-aeson ==2.2.2.0, - any.authenticate-oauth ==1.7, - any.base ==4.21.0.0, - any.base-orphans ==0.9.3, - any.base16-bytestring ==1.0.2.0, - any.base64 ==1.0, - any.base64-bytestring ==1.2.1.0, - any.basement ==0.0.16, - any.bifunctors ==5.6.2, - bifunctors +tagged, - any.binary ==0.8.9.2, - any.binary-instances ==1.0.6, - any.binary-orphans ==1.0.5, - any.bitvec ==1.1.5.0, - bitvec +simd, - any.blaze-builder ==0.4.4.1, - any.byteorder ==1.0.4, - any.bytestring ==0.12.2.0, - any.cabal-doctest ==1.0.11, - any.call-stack ==0.4.0, - any.case-insensitive ==1.2.1.0, - any.cborg ==0.2.10.0, - cborg +optimize-gmp, - any.cereal ==0.5.8.3, - cereal -bytestring-builder, - any.character-ps ==0.1, - any.colour ==2.3.6, - any.comonad ==5.0.9, - comonad +containers +distributive +indexed-traversable, - any.conduit ==1.3.6.1, - any.conduit-extra ==1.3.8, - any.containers ==0.7, - any.contravariant ==1.5.5, - contravariant +semigroups +statevar +tagged, - any.cookie ==0.5.1, - any.crypto-api ==0.13.3, - crypto-api -all_cpolys, - any.crypto-pubkey-types ==0.4.3, - any.crypton ==1.0.4, - crypton -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq +support_pclmuldq +support_rdrand -support_sse +use_target_attributes, - any.crypton-connection ==0.4.5, - any.crypton-socks ==0.6.2, - crypton-socks -example +network-3-0-0-0, - any.crypton-x509 ==1.7.7, - any.crypton-x509-store ==1.6.11, - any.crypton-x509-system ==1.6.7, - any.crypton-x509-validation ==1.6.14, - any.cryptonite ==0.30, - cryptonite -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq -support_pclmuldq +support_rdrand -support_sse +use_target_attributes, - any.data-default ==0.8.0.1, - any.data-default-class ==0.2.0.0, - any.data-fix ==0.3.4, - any.deepseq ==1.5.1.0, - any.directory ==1.3.9.0, - any.distributive ==0.6.2.1, - distributive +semigroups +tagged, - any.dlist ==1.0, - dlist -werror, - any.ech-config ==0.0.1, - ech-config -devel, - any.entropy ==0.4.1.11, - entropy -donotgetentropy, - any.exceptions ==0.10.9, - any.file-io ==0.1.5, - any.filepath ==1.5.4.0, - any.free ==5.2, - any.generically ==0.1.1, - any.ghc-bignum ==1.3, - any.ghc-boot-th ==9.12.1, - any.ghc-internal ==9.1201.0, - any.ghc-prim ==0.13.0, - any.git ==0.3.0, - any.half ==0.3.3, - any.hashable ==1.5.0.0, - hashable -arch-native -random-initial-seed, - any.hoauth2 ==2.14.3, - any.hourglass ==0.2.12, - any.hpke ==0.0.0, - any.hsc2hs ==0.68.10, - hsc2hs -in-ghc-tree, - any.http-client ==0.7.19, - http-client +network-uri, - any.http-client-tls ==0.3.6.4, - any.http-conduit ==2.3.9.1, - http-conduit +aeson, - any.http-types ==0.12.4, - any.indexed-traversable ==0.1.4, - any.indexed-traversable-instances ==0.1.2, - any.integer-conversion ==0.1.1, - any.integer-gmp ==1.1, - any.integer-logarithms ==1.0.4, - integer-logarithms -check-bounds +integer-gmp, - any.invariant ==0.6.4, - any.iproute ==1.7.15, - any.kan-extensions ==5.2.7, - any.lens ==5.3.5, - lens -benchmark-uniplate -dump-splices +inlining -j +test-hunit +test-properties +test-templates +trustworthy, - any.lens-aeson ==1.2.3, - any.libyaml ==0.1.4, - libyaml -no-unicode -system-libyaml, - any.libyaml-clib ==0.2.5, - any.memory ==0.18.0, - memory +support_bytestring +support_deepseq, - any.microlens ==0.4.14.0, - any.mime-types ==0.1.2.0, - any.mono-traversable ==1.0.21.0, - any.mtl ==2.3.1, - any.network ==3.2.8.0, - network -devel, - any.network-byte-order ==0.1.7, - any.network-uri ==2.6.4.2, - any.old-locale ==1.0.0.7, - any.old-time ==1.1.0.4, - any.optparse-applicative ==0.19.0.0, - optparse-applicative +process, - any.os-string ==2.0.7, - any.parallel ==3.2.2.0, - any.parsec ==3.1.17.0, - any.pem ==0.2.4, - any.pretty ==1.1.3.6, - any.prettyprinter ==1.7.1, - prettyprinter -buildreadme +text, - any.prettyprinter-ansi-terminal ==1.1.3, - any.primitive ==0.9.1.0, - any.process ==1.6.25.0, - any.profunctors ==5.6.3, - any.psqueues ==0.2.8.2, - any.random ==1.3.1, - any.raw-strings-qq ==1.1, - any.reflection ==2.1.9, - reflection -slow +template-haskell, - any.resourcet ==1.3.0, - any.rts ==1.0.2, - any.scientific ==0.3.8.0, - scientific -integer-simple, - any.semialign ==1.3.1, - semialign +semigroupoids, - any.semigroupoids ==6.0.1, - semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers, - any.semigroups ==0.20, - semigroups +binary +bytestring -bytestring-builder +containers +deepseq +hashable +tagged +template-haskell +text +transformers +unordered-containers, - any.serialise ==0.2.6.1, - serialise +newtime15, - any.split ==0.2.5, - any.splitmix ==0.1.3.1, - splitmix -optimised-mixer, - any.stm ==2.5.3.1, - any.streaming-commons ==0.2.3.0, - streaming-commons -use-bytestring-builder, - any.strict ==0.5.1, - any.string-conversions ==0.4.0.1, - any.system-fileio ==0.3.16.7, - any.system-filepath ==0.4.14.1, - any.tagged ==0.8.9, - tagged +deepseq +transformers, - any.tasty ==1.5.3, - tasty +unix, - any.template-haskell ==2.23.0.0, - any.temporary ==1.3, - any.text ==2.1.2, - any.text-iso8601 ==0.1.1, - any.text-short ==0.1.6, - text-short -asserts, - any.th-abstraction ==0.7.1.0, - any.th-compat ==0.1.6, - any.th-lift ==0.8.6, - any.th-lift-instances ==0.1.20, - any.these ==1.2.1, - any.time ==1.14, - any.time-compat ==1.9.8, - any.time-locale-compat ==0.1.1.5, - time-locale-compat -old-locale, - any.tls ==2.1.11, - tls -devel, - any.transformers ==0.6.1.2, - any.transformers-base ==0.4.6, - transformers-base +orphaninstances, - any.transformers-compat ==0.7.2, - transformers-compat -five +five-three -four +generic-deriving +mtl -three -two, - any.typed-process ==0.2.13.0, - any.unix ==2.8.6.0, - any.unix-compat ==0.7.4.1, - any.unix-time ==0.4.17, - any.unliftio-core ==0.2.1.0, - any.unordered-containers ==0.2.20, - unordered-containers -debug, - any.uri-bytestring ==0.4.0.1, - uri-bytestring -lib-werror, - any.uri-bytestring-aeson ==0.1.0.9, - any.utf8-string ==1.0.2, - any.uuid-types ==1.0.6, - any.vector ==0.13.2.0, - vector +boundschecks -internalchecks -unsafechecks -wall, - any.vector-algorithms ==0.9.1.0, - vector-algorithms +bench +boundschecks -internalchecks -llvm -unsafechecks, - any.vector-binary-instances ==0.2.5.2, - any.vector-stream ==0.1.0.1, - any.void ==0.7.3, - void -safe, - any.witherable ==0.5, - any.wreq ==0.5.4.3, - wreq -aws -developer +doctest -httpbin, - any.yaml ==0.11.11.2, - yaml +no-examples +no-exe, - any.zlib ==0.7.1.1, - zlib -bundled-c-zlib +non-blocking-ffi +pkg-config, - any.zlib-bindings ==0.1.1.5 -index-state: hackage.haskell.org 2025-09-28T05:10:57Z From 5ff1f5a2a58e946538d5916331d404c79a99cda5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Oct 2025 12:32:11 +0000 Subject: [PATCH 3/4] Improve API error messages with HTTP status and response details Co-authored-by: diskshima <2049613+diskshima@users.noreply.github.com> --- src/BitbucketApi.hs | 34 ++++++++++++++++++++++++---------- src/GitHubApi.hs | 32 ++++++++++++++++++++++---------- src/JsonUtils.hs | 10 ++++++++-- 3 files changed, 54 insertions(+), 22 deletions(-) diff --git a/src/BitbucketApi.hs b/src/BitbucketApi.hs index dd7fb01..09e50a3 100644 --- a/src/BitbucketApi.hs +++ b/src/BitbucketApi.hs @@ -25,6 +25,7 @@ import Bitbucket.PullRequest as BP (BranchDetails (..), PullRequestBranch (..), PullRequests (..)) import Bitbucket.PullRequest as BPP (PullRequestPost (..)) +import Control.Exception (catch, SomeException) import Control.Lens ((^.)) import Control.Lens.Operators ((.~)) import CredentialUtils (Credentials (..), credFilePath, @@ -151,13 +152,16 @@ refreshAccessToken = do getBitbucket :: Token -> String -> IO (Response BL.ByteString) getBitbucket token url = do - response <- getWith (bearerAuthHeader token) url + response <- (getWith (bearerAuthHeader token) url) `catch` handleHttpException url let code = response ^. (responseStatus . statusCode) case code of 401 -> do newToken <- refreshAccessToken - getWith (bearerAuthHeader newToken) url + (getWith (bearerAuthHeader newToken) url) `catch` handleHttpException url _ -> return response + where + handleHttpException :: String -> SomeException -> IO a + handleHttpException reqUrl e = P.error $ "HTTP request failed.\nURL: " ++ reqUrl ++ "\nError: " ++ P.show e getIssue :: Token -> String -> IO I.Issue getIssue token itemId = responseToIssue <$> runItemQuery token path @@ -178,7 +182,7 @@ listIssues token _ = do Just url -> do issues <- getIssuesFromUrl token url return $ responseToIssue <$> issues - Nothing -> P.error "Could not identify remote URL." + Nothing -> P.error "Could not identify remote URL. Please ensure you are in a Git repository with a Bitbucket remote." getIssuesFromUrl :: Token -> String -> IO [Issue] getIssuesFromUrl _ "" = return [] @@ -200,7 +204,7 @@ listPullRequests token = do Just url -> do items <- getPullRequestsFromUrl token url return $ responseToPullRequest <$> items - Nothing -> P.error "Could not identify remote URL." + Nothing -> P.error "Could not identify remote URL. Please ensure you are in a Git repository with a Bitbucket remote." createPullRequest :: Token -> PR.PullRequest -> IO PR.PullRequest createPullRequest token item = responseToPullRequest <$> runCreate token "/pullrequests" param @@ -220,19 +224,26 @@ runItemQuery token suffix = do maybeUrl <- buildUrl suffix Nothing case maybeUrl of Just url -> do - maybeItem <- decodeResponse <$> getBitbucket token url + response <- getBitbucket token url + let code = response ^. (responseStatus . statusCode) + maybeItem <- return $ decodeResponse response case maybeItem of Just item -> return item - Nothing -> P.error "Failed to parse response." - Nothing -> P.error "Could not identify remote URL." + Nothing -> P.error $ "Failed to parse response from Bitbucket API.\nURL: " ++ url ++ "\nHTTP Status: " ++ P.show code + Nothing -> P.error "Could not identify remote URL. Please ensure you are in a Git repository with a Bitbucket remote." runCreate :: (ToJSON a, FromJSON b) => Token -> String -> a -> IO b runCreate token suffix param = do -- print $ toJSON param maybeUrl <- buildUrl suffix Nothing case maybeUrl of - Just url -> decodeResponseOrError <$> postBitbucket token url (toJSON param) - Nothing -> P.error "Could not identify remote URL." + Just url -> do + response <- postBitbucket token url (toJSON param) + let code = response ^. (responseStatus . statusCode) + case decodeResponse response of + Just item -> return item + Nothing -> P.error $ "Failed to parse response from Bitbucket API.\nURL: " ++ url ++ "\nHTTP Status: " ++ P.show code + Nothing -> P.error "Could not identify remote URL. Please ensure you are in a Git repository with a Bitbucket remote." readIssueTemplate :: IO String readIssueTemplate = return "" @@ -241,4 +252,7 @@ readPRTemplate :: IO String readPRTemplate = return "" postBitbucket :: Postable a => Token -> String -> a -> IO (Response BL.ByteString) -postBitbucket token = postWith $ bearerAuthHeader token +postBitbucket token url body = (postWith (bearerAuthHeader token) url body) `catch` handleHttpException url + where + handleHttpException :: String -> SomeException -> IO a + handleHttpException reqUrl e = P.error $ "HTTP request failed.\nURL: " ++ reqUrl ++ "\nError: " ++ P.show e diff --git a/src/GitHubApi.hs b/src/GitHubApi.hs index 2338c77..e59fc7e 100644 --- a/src/GitHubApi.hs +++ b/src/GitHubApi.hs @@ -17,6 +17,7 @@ module GitHubApi , runCreate ) where +import Control.Exception (SomeException, catch) import Control.Lens.Operators ((.~), (^.)) import Data.Aeson (FromJSON (parseJSON), ToJSON (toJSON), genericParseJSON) @@ -39,7 +40,8 @@ import JsonUtils (decodeResponse, import Network.HTTP.Types.URI (renderQuery) import Network.Wreq (Options, Response, defaults, getWith, header, linkURL, postWith, - responseLink) + responseLink, responseStatus, + statusCode) import Network.Wreq.Types (Postable) import Prelude as P import System.Directory (doesPathExist) @@ -101,10 +103,16 @@ gitHubHeader :: Token -> Options gitHubHeader token = defaults & header "Authorization" .~ [U8.fromString $ "token " ++ token] getGitHub :: Token -> String -> IO (Response BL.ByteString) -getGitHub token = getWith $ gitHubHeader token +getGitHub token url = (getWith (gitHubHeader token) url) `catch` handleHttpException url + where + handleHttpException :: String -> SomeException -> IO a + handleHttpException reqUrl e = P.error $ "HTTP request failed.\nURL: " ++ reqUrl ++ "\nError: " ++ P.show e postGitHub :: Postable a => Token -> String -> a -> IO (Response BL.ByteString) -postGitHub token = postWith $ gitHubHeader token +postGitHub token url postBody = (postWith (gitHubHeader token) url postBody) `catch` handleHttpException url + where + handleHttpException :: String -> SomeException -> IO a + handleHttpException reqUrl e = P.error $ "HTTP request failed.\nURL: " ++ reqUrl ++ "\nError: " ++ P.show e responseToIssue :: IG.IssueGet -> I.Issue responseToIssue i = @@ -145,18 +153,20 @@ runItemQuery token suffix = do maybeUrl <- buildUrl suffix Nothing case maybeUrl of Just url -> do - maybeItem <- decodeResponse <$> getGitHub token url + response <- getGitHub token url + let code = response ^. (responseStatus . statusCode) + maybeItem <- return $ decodeResponse response case maybeItem of Just item -> return item - Nothing -> P.error "Failed to parse response." - Nothing -> P.error "Could not identify remote URL." + Nothing -> P.error $ "Failed to parse response from GitHub API.\nURL: " ++ url ++ "\nHTTP Status: " ++ P.show code + Nothing -> P.error "Could not identify remote URL. Please ensure you are in a Git repository with a GitHub remote." runListQuery :: FromJSON a => Token -> String -> (a -> b) -> (a -> Bool) -> Bool -> IO [b] runListQuery token suffix converter filtFunc showAll = do maybeUrl <- buildUrl suffix params case maybeUrl of Just url -> fmap converter . filter filtFunc <$> getItemsFromUrl token url - Nothing -> P.error "Could not identify remote URL." + Nothing -> P.error "Could not identify remote URL. Please ensure you are in a Git repository with a GitHub remote." where params = if showAll then (Just . toParamList) [("filter", "all"), ("state", "all")] else Nothing @@ -173,11 +183,13 @@ runCreate token suffix param = do maybeUrl <- buildUrl suffix Nothing case maybeUrl of Just url -> do - maybeItem <- decodeResponse <$> postGitHub token url (toJSON param) + response <- postGitHub token url (toJSON param) + let code = response ^. (responseStatus . statusCode) + maybeItem <- return $ decodeResponse response case maybeItem of Just item -> return item - Nothing -> P.error "Failed to parse response." - Nothing -> P.error "Could not identify remote URL." + Nothing -> P.error $ "Failed to parse response from GitHub API.\nURL: " ++ url ++ "\nHTTP Status: " ++ P.show code + Nothing -> P.error "Could not identify remote URL. Please ensure you are in a Git repository with a GitHub remote." readIssueTemplate :: IO String readIssueTemplate = readFileFromRepoRoot ".github/ISSUE_TEMPLATE.md" diff --git a/src/JsonUtils.hs b/src/JsonUtils.hs index a293125..7dd4589 100644 --- a/src/JsonUtils.hs +++ b/src/JsonUtils.hs @@ -8,8 +8,9 @@ module JsonUtils import Control.Lens.Operators ((^.)) import Data.Aeson (FromJSON, decode) import qualified Data.ByteString.Lazy as BL +import qualified Data.ByteString.Lazy.Char8 as BL8 import Data.Maybe (fromMaybe) -import Network.Wreq (Response, responseBody) +import Network.Wreq (Response, responseBody, responseStatus, statusCode) decodeResponse :: FromJSON a => Response BL.ByteString -> Maybe a decodeResponse resp = decode (resp ^. responseBody) @@ -19,4 +20,9 @@ decodeResponseAsList resp = fromMaybe [] items where items = decode (resp ^. responseBody) decodeResponseOrError :: FromJSON a => Response BL.ByteString -> a -decodeResponseOrError resp = fromMaybe (error "Failed to parse response") $ decodeResponse resp +decodeResponseOrError resp = fromMaybe (error errorMsg) $ decodeResponse resp + where + code = resp ^. (responseStatus . statusCode) + body = BL8.unpack $ resp ^. responseBody + bodyPreview = if length body > 200 then take 200 body ++ "..." else body + errorMsg = "Failed to parse response.\nHTTP Status: " ++ show code ++ "\nResponse body: " ++ bodyPreview From 0370c042b3f6dd66c8c2513bc0323143deb7defd Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Oct 2025 13:50:10 +0000 Subject: [PATCH 4/4] Restore cabal.project.freeze file Co-authored-by: diskshima <2049613+diskshima@users.noreply.github.com> --- cabal.project.freeze | 238 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 cabal.project.freeze diff --git a/cabal.project.freeze b/cabal.project.freeze new file mode 100644 index 0000000..4c9cfba --- /dev/null +++ b/cabal.project.freeze @@ -0,0 +1,238 @@ +active-repositories: hackage.haskell.org:merge +constraints: any.Cabal ==3.14.1.0, + any.Cabal-syntax ==3.14.1.0, + any.HTTP ==4000.4.1, + HTTP -conduit10 +network-uri -warn-as-error -warp-tests, + any.OneTuple ==0.4.2, + any.QuickCheck ==2.16.0.0, + QuickCheck -old-random +templatehaskell, + any.RSA ==2.4.1, + any.SHA ==1.6.4.4, + SHA -exe, + any.StateVar ==1.2.2, + any.adjunctions ==4.4.3, + any.aeson ==2.2.3.0, + aeson +ordered-keymap, + any.aeson-casing ==0.2.0.0, + any.ansi-terminal ==1.1.3, + ansi-terminal -example, + any.ansi-terminal-types ==1.1.3, + any.appar ==0.1.8, + any.array ==0.5.8.0, + any.asn1-encoding ==0.9.6, + any.asn1-parse ==0.9.5, + any.asn1-types ==0.3.4, + any.assoc ==1.1.1, + assoc -tagged, + any.async ==2.2.5, + async -bench, + any.attoparsec ==0.14.4, + attoparsec -developer, + any.attoparsec-aeson ==2.2.2.0, + any.authenticate-oauth ==1.7, + any.base ==4.21.0.0, + any.base-orphans ==0.9.3, + any.base16-bytestring ==1.0.2.0, + any.base64 ==1.0, + any.base64-bytestring ==1.2.1.0, + any.basement ==0.0.16, + any.bifunctors ==5.6.2, + bifunctors +tagged, + any.binary ==0.8.9.2, + any.binary-instances ==1.0.6, + any.binary-orphans ==1.0.5, + any.bitvec ==1.1.5.0, + bitvec +simd, + any.blaze-builder ==0.4.4.1, + any.byteorder ==1.0.4, + any.bytestring ==0.12.2.0, + any.cabal-doctest ==1.0.11, + any.call-stack ==0.4.0, + any.case-insensitive ==1.2.1.0, + any.cborg ==0.2.10.0, + cborg +optimize-gmp, + any.cereal ==0.5.8.3, + cereal -bytestring-builder, + any.character-ps ==0.1, + any.colour ==2.3.6, + any.comonad ==5.0.9, + comonad +containers +distributive +indexed-traversable, + any.conduit ==1.3.6.1, + any.conduit-extra ==1.3.8, + any.containers ==0.7, + any.contravariant ==1.5.5, + contravariant +semigroups +statevar +tagged, + any.cookie ==0.5.1, + any.crypto-api ==0.13.3, + crypto-api -all_cpolys, + any.crypto-pubkey-types ==0.4.3, + any.crypton ==1.0.4, + crypton -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq +support_pclmuldq +support_rdrand -support_sse +use_target_attributes, + any.crypton-connection ==0.4.5, + any.crypton-socks ==0.6.2, + crypton-socks -example +network-3-0-0-0, + any.crypton-x509 ==1.7.7, + any.crypton-x509-store ==1.6.11, + any.crypton-x509-system ==1.6.7, + any.crypton-x509-validation ==1.6.14, + any.cryptonite ==0.30, + cryptonite -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq -support_pclmuldq +support_rdrand -support_sse +use_target_attributes, + any.data-default ==0.8.0.1, + any.data-default-class ==0.2.0.0, + any.data-fix ==0.3.4, + any.deepseq ==1.5.1.0, + any.directory ==1.3.9.0, + any.distributive ==0.6.2.1, + distributive +semigroups +tagged, + any.dlist ==1.0, + dlist -werror, + any.ech-config ==0.0.1, + ech-config -devel, + any.entropy ==0.4.1.11, + entropy -donotgetentropy, + any.exceptions ==0.10.9, + any.file-io ==0.1.5, + any.filepath ==1.5.4.0, + any.free ==5.2, + any.generically ==0.1.1, + any.ghc-bignum ==1.3, + any.ghc-boot-th ==9.12.1, + any.ghc-internal ==9.1201.0, + any.ghc-prim ==0.13.0, + any.git ==0.3.0, + any.half ==0.3.3, + any.hashable ==1.5.0.0, + hashable -arch-native -random-initial-seed, + any.hoauth2 ==2.14.3, + any.hourglass ==0.2.12, + any.hpke ==0.0.0, + any.hsc2hs ==0.68.10, + hsc2hs -in-ghc-tree, + any.http-client ==0.7.19, + http-client +network-uri, + any.http-client-tls ==0.3.6.4, + any.http-conduit ==2.3.9.1, + http-conduit +aeson, + any.http-types ==0.12.4, + any.indexed-traversable ==0.1.4, + any.indexed-traversable-instances ==0.1.2, + any.integer-conversion ==0.1.1, + any.integer-gmp ==1.1, + any.integer-logarithms ==1.0.4, + integer-logarithms -check-bounds +integer-gmp, + any.invariant ==0.6.4, + any.iproute ==1.7.15, + any.kan-extensions ==5.2.7, + any.lens ==5.3.5, + lens -benchmark-uniplate -dump-splices +inlining -j +test-hunit +test-properties +test-templates +trustworthy, + any.lens-aeson ==1.2.3, + any.libyaml ==0.1.4, + libyaml -no-unicode -system-libyaml, + any.libyaml-clib ==0.2.5, + any.memory ==0.18.0, + memory +support_bytestring +support_deepseq, + any.microlens ==0.4.14.0, + any.mime-types ==0.1.2.0, + any.mono-traversable ==1.0.21.0, + any.mtl ==2.3.1, + any.network ==3.2.8.0, + network -devel, + any.network-byte-order ==0.1.7, + any.network-uri ==2.6.4.2, + any.old-locale ==1.0.0.7, + any.old-time ==1.1.0.4, + any.optparse-applicative ==0.19.0.0, + optparse-applicative +process, + any.os-string ==2.0.7, + any.parallel ==3.2.2.0, + any.parsec ==3.1.17.0, + any.pem ==0.2.4, + any.pretty ==1.1.3.6, + any.prettyprinter ==1.7.1, + prettyprinter -buildreadme +text, + any.prettyprinter-ansi-terminal ==1.1.3, + any.primitive ==0.9.1.0, + any.process ==1.6.25.0, + any.profunctors ==5.6.3, + any.psqueues ==0.2.8.2, + any.random ==1.3.1, + any.raw-strings-qq ==1.1, + any.reflection ==2.1.9, + reflection -slow +template-haskell, + any.resourcet ==1.3.0, + any.rts ==1.0.2, + any.scientific ==0.3.8.0, + scientific -integer-simple, + any.semialign ==1.3.1, + semialign +semigroupoids, + any.semigroupoids ==6.0.1, + semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers, + any.semigroups ==0.20, + semigroups +binary +bytestring -bytestring-builder +containers +deepseq +hashable +tagged +template-haskell +text +transformers +unordered-containers, + any.serialise ==0.2.6.1, + serialise +newtime15, + any.split ==0.2.5, + any.splitmix ==0.1.3.1, + splitmix -optimised-mixer, + any.stm ==2.5.3.1, + any.streaming-commons ==0.2.3.0, + streaming-commons -use-bytestring-builder, + any.strict ==0.5.1, + any.string-conversions ==0.4.0.1, + any.system-fileio ==0.3.16.7, + any.system-filepath ==0.4.14.1, + any.tagged ==0.8.9, + tagged +deepseq +transformers, + any.tasty ==1.5.3, + tasty +unix, + any.template-haskell ==2.23.0.0, + any.temporary ==1.3, + any.text ==2.1.2, + any.text-iso8601 ==0.1.1, + any.text-short ==0.1.6, + text-short -asserts, + any.th-abstraction ==0.7.1.0, + any.th-compat ==0.1.6, + any.th-lift ==0.8.6, + any.th-lift-instances ==0.1.20, + any.these ==1.2.1, + any.time ==1.14, + any.time-compat ==1.9.8, + any.time-locale-compat ==0.1.1.5, + time-locale-compat -old-locale, + any.tls ==2.1.11, + tls -devel, + any.transformers ==0.6.1.2, + any.transformers-base ==0.4.6, + transformers-base +orphaninstances, + any.transformers-compat ==0.7.2, + transformers-compat -five +five-three -four +generic-deriving +mtl -three -two, + any.typed-process ==0.2.13.0, + any.unix ==2.8.6.0, + any.unix-compat ==0.7.4.1, + any.unix-time ==0.4.17, + any.unliftio-core ==0.2.1.0, + any.unordered-containers ==0.2.20, + unordered-containers -debug, + any.uri-bytestring ==0.4.0.1, + uri-bytestring -lib-werror, + any.uri-bytestring-aeson ==0.1.0.9, + any.utf8-string ==1.0.2, + any.uuid-types ==1.0.6, + any.vector ==0.13.2.0, + vector +boundschecks -internalchecks -unsafechecks -wall, + any.vector-algorithms ==0.9.1.0, + vector-algorithms +bench +boundschecks -internalchecks -llvm -unsafechecks, + any.vector-binary-instances ==0.2.5.2, + any.vector-stream ==0.1.0.1, + any.void ==0.7.3, + void -safe, + any.witherable ==0.5, + any.wreq ==0.5.4.3, + wreq -aws -developer +doctest -httpbin, + any.yaml ==0.11.11.2, + yaml +no-examples +no-exe, + any.zlib ==0.7.1.1, + zlib -bundled-c-zlib +non-blocking-ffi +pkg-config, + any.zlib-bindings ==0.1.1.5 +index-state: hackage.haskell.org 2025-09-28T05:10:57Z