Make runTLS{Client,Server}StartTLS general #264
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This makes it possible to use general
runTLSClientStartTLS
without losing monadic state, and also generalizesrunTLSServerStartTLS
. Consists of several parts:ApplicationStartTLS
returna
-- this allows us to return and re-introduce wrapped monadic state withliftBaseOp
.startTLS
function. Another possible solution would be to use impredicative types to allow returning value from it (replace(AppData -> IO ()) -> IO ()
withforall a. (AppData -> IO a) -> IO a
and use ordinaryliftBaseOp
). Unfortunately, GHC doesn't work well with this.runTLS*StartTLS
functions.Also this allows one to return value from
runTLSClientStartTLS
(not strictly needed for this patch) and drops an extra constraint fromrunTLSClient
.I'm not sure if this needs to be done some other way w.r.t. backwards compatibility.
EDIT: Also notice that (1) is also not strictly required as we already have (2) for passing state. If needed, I can split this into a different PR.