unison/unison-src/transcripts/fix2026.output.md
Greg Pfeil 0031542faf
Add a space before code block info strings
This is for consistency with the `cmark` style. Now the blocks we still
pretty-print ourselves will match the bulk of them that `cmark`
produces.
2024-07-10 13:56:07 -06:00

1.9 KiB
Raw Permalink Blame History

structural ability Exception where raise : Failure -> x

ex = unsafeRun! '(printLine "hello world")

printLine : Text ->{IO, Exception} ()
printLine t =
    putText stdOut t
    putText stdOut "\n"

stdOut : Handle
stdOut = stdHandle StdOut

compose2 : (c ->{𝕖1} d) -> (a ->{𝕖2} b ->{𝕖3} c) -> a -> b ->{𝕖1,𝕖2,𝕖3} d
compose2 f g x y = f (g x y)

putBytes : Handle -> Bytes ->{IO, Exception} ()
putBytes = compose2 toException putBytes.impl

toException : Either Failure a ->{Exception} a
toException = cases
  Left e -> raise e
  Right a -> a

putText : Handle -> Text ->{IO, Exception} ()
putText h t = putBytes h (toUtf8 t)

Exception.unsafeRun! : '{Exception, g} a -> '{g} a
Exception.unsafeRun! e _ = 
    h : Request {Exception} a -> a 
    h = cases 
        {Exception.raise fail -> _ } -> 
            bug fail 
        {a} -> a 
    handle !e with h 

  Loading changes detected in scratch.u.

  I found and typechecked these definitions in scratch.u. If you
  do an `add` or `update`, here's how your codebase would
  change:
  
    ⍟ These new definitions are ok to `add`:
    
      structural ability Exception
        (also named builtin.Exception)
      Exception.unsafeRun! : '{g, Exception} a -> '{g} a
      compose2             : (c ->{𝕖1} d)
                             -> (a ->{𝕖2} b ->{𝕖3} c)
                             -> a
                             -> b
                             ->{𝕖1, 𝕖2, 𝕖3} d
      ex                   : '{IO} ()
      printLine            : Text ->{IO, Exception} ()
      putBytes             : Handle
                             -> Bytes
                             ->{IO, Exception} ()
      putText              : Handle -> Text ->{IO, Exception} ()
      stdOut               : Handle
      toException          : Either Failure a ->{Exception} a

scratch/main> run ex 

  ()