Add support for more flexible backend streams
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 25/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Necesita aclaración
- Estado de actividad
- Estancado
- Stack tecnológico
- haskell
- Área
- networking
Línea de trabajo
Start by reviewing HaskellNet's IMAP stream handling and the BSStreamM approach in the linked monadio branch. Compare that with the proposed conduit-based connection model and determine which direction has consensus. Done means a scoped, agreed design for flexible backend streams rather than an unresolved choice between alternatives.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
I wanted to use IMAP with TLS and this turned out to be quite complex. (Relates to #7.) So far, I found these solutions:
-
Use threads - one for wrapping a connection into TLS and another for the actual IMAP handling. This is awful.
-
Use
MonadIOinstead ofIOeverywhere. I already tried this variant in this branch for IMAP. It seems to work well and I was able to fuse such patched IMAP with network-conduit. The main part looks like this:main = runTCPClient (clientSettings 143 (BS.pack "imap.centrum.cz")) capabilities capabilities :: Application IO capabilities ad = appSource ad $= f $$ appSink ad where f :: Conduit BS.ByteString IO ByteString f = do c <- connectStream conduitBSStream capability c >>= liftIO . print logout c type BSPipe m = ConduitM ByteString ByteString m conduitBSStream :: (Monad m) => BSStreamM (BSPipe m) -- implementation ...Here
BSStreamMis a (backward compatible) modification that takes an arbitraryMonadIOinstead ofIO. This allows us to run the whole code inConduitinstead ofIOand so the actions inBSStreamMcan be operations constructed usingConduitprimitives. (Full example code here).This modification adds generality and the only loss is slightly more complex type signatures.
-
Modify HaskellNet so that it's based on conduit instead of
IO. I don't have a clear picture yet. The general idea is that connection wouldn't hold aBSStreambut aSinkfor network output and aResumableSourcefor network input. This would allow to plug in any conduit, even a pure one (for testing, for example).
I'm willing to participate on those changes, if we reach some consensus.
- Lenguaje dominante
- Haskell
- Estrellas
- 92
- Forks
- 57
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de qnikst/HaskellNet
-
Dificultad 2/5 Menos de una hora Aptitud para principiantes 65/100
qnikst/HaskellNet#125 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
qnikst/HaskellNet#107 · 1 comentario ·
-
Support for UIDPLUS extensionAbiertofeature
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
qnikst/HaskellNet#84 ·
-
feature
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
qnikst/HaskellNet#80 ·
-
feature help needed
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
qnikst/HaskellNet#77 ·
Todos los issues de qnikst/HaskellNet
Issues similares
-
validateXmirOptions error message is missing the word 'option'Posiblemente ocupada @opusstudiohq-max la tomó hace 1 día. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
objectionary/phino#2256 ·
Los mantenedores suelen responder en 1 día
-
30-minutes algorithm any-language codewars dart easy elixir hackerrank hacktoberfest haskell help wanted interview-prep julia leetcode lua open-source r scala students zig
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Huerte/algo-solutions-python#163 ·
Los mantenedores suelen responder en 1 día
-
subsystem: saw-core type: bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
GaloisInc/saw-script#3516 ·
Los mantenedores suelen responder en 1 día
-
linear
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
MercuryTechnologies/ghciwatch#466 ·
-
no source repo for time-managerAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
yesodweb/wai#1163 · 1 reacción ·
Los mantenedores suelen responder en 1 día