Custom instances of HStream impossible to write
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 25/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Stale
- Tech stack
- haskell
- Domain
- networking
Research direction
Start with HStream, HandleStream, openStream, close, and openTCPConnection in Network.TCP, then inspect hstreamToConnection and Connection in Network.Stream. Determine an API that lets custom HStream instances close their HandleStream without lazy I/O or relying on the String-specific conversion. Done means a custom buffer type can define explicit connection cleanup.
Written by the indexing model from the issue text.
Description
It would be nice to be able to have an instance of HStream that allows to stream without using lazy I/O; in particular, an instance that would allow us to close the connection when we no longer want the rest of the response body.
However, in order to define a custom type with a corresponding HStream instance one needs to provide, amongst other things, implementations of
openStream :: String -> Int -> IO (HandleStream bufType)
close :: HandleStream bufType -> IO ()
For the implementation of openStream we can use
openTCPConnection :: BufferType ty => String -> Int -> IO (HandleStream ty)
However, for the implementation of close we are stuck; there is no function analogous to openTCPConnection that allows us to close a HandleStream.
Although we have
hstreamToConnection :: HandleStream String -> Connection
and there is a Stream instance for Connection, hstreamToConnection works only for HandleStream String, so that doesn't help either.
Finally, the HandleStream type is completely opaque (it does not even satisfy Functor) so we cannot define a HStream instance for one bufType in terms of the HStream instance for another. If we had some way of defining new instances in terms of old instances (for instance, reuse the instance for lazy bytestrings, but somehow retain a handle to the corresponding HandleStream so that we can close it explicitly) that would be great.
- Dominant language
- Haskell
- Stars
- 186
- Forks
- 59
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from haskell/HTTP
-
Difficulty 1/5 1-3 hours Newbie friendliness 88/100
-
Difficulty 1/5 Under an hour Newbie friendliness 55/100
-
Difficulty 4/5 3-5 days Newbie friendliness 38/100
-
Difficulty 3/5 1-2 days Newbie friendliness 38/100
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
-
zip-archive-0.5 Open
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
commercialhaskell/stackage#8124 · 1 comment ·
-
chore
Difficulty 1/5 Under an hour Newbie friendliness 91/100
alunduil/alunduil-chezmoi#792 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
haskellfoundation/haskellfoundation.github.io#637 · 2 comments ·
-
Difficulty 1/5 Under an hour Newbie friendliness 85/100
koalaman/shellcheck#3539 ·