unison/unison-src/transcripts/patternMatchTls.md
2024-06-25 11:11:07 -07:00

765 B

scratch/main> builtins.merge

We had bugs in the calling conventions for both send and terminate which would cause pattern matching on the resulting (Right ()) would cause a runtime error.

use builtin.io2.Tls newClient send handshake terminate

frank: '{IO} ()
frank = do
  socket = assertRight (clientSocket.impl "example.com" "443")
  config = ClientConfig.default "example.com" 0xs
  tls = assertRight (newClient.impl config socket)
  () = assertRight (handshake.impl tls)
  () = assertRight (send.impl tls 0xs)
  () = assertRight (terminate.impl tls)
  ()

assertRight : Either a b -> b
assertRight = cases
  Right x -> x
  Left _ -> bug "expected a right but got a left"
scratch/main> add
scratch/main> run frank