I'm pretty sure raiseIO#, catch#, maskAsyncExceptions#, and so on can
have open-kinded results. For example, we currently have

catch#
  :: (State# RealWorld -> (# State# RealWorld, a #) )
  -> (b -> State# RealWorld -> (# State# RealWorld, a #) )
  -> State# RealWorld
  -> (# State# RealWorld, a #)

but I think we *should* be able to have

catch#
  :: (State# RealWorld -> (# State# RealWorld, o #) )
  -> (b -> State# RealWorld -> (# State# RealWorld, o #) )
  -> State# RealWorld
  -> (# State# RealWorld, o #)

This should allow us to avoid boxing things just to be able to get
them out of a `catch#` or `maskAsyncExceptions#` block. But when I
tried just changing the types in primops.txt.pp, I got a type mismatch
error that seems to suggest some sort of GHC build staging issue. How
can I work around this? See
https://gitlab.haskell.org/ghc/ghc/-/merge_requests/4192/diffs for my
attempt.
_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to