When learning about Control.Arrow
and Haskell's built-in proc
notation, I had the idea that this language might prove very useful as an eDSL for general monoidal categories (using ***
for tensor and >>>
for composition), if only the Arrow
typeclass were generalized to allow a general tens :: * -> * -> *
operation rather than Arrow
's (,) : * -> * -> *
.
After doing some research, I found GArrows
, which seem to fit my needs. However, the linked Garrow
typeclass comes bundled with the so-called "HetMet" GHC extensions, and support for other features that (for the time being, anyway), I don't have much use for, such as "modal types".
Given that I would like to be able to use such a GArrow
typeclass without having to install non-standard GHC extensions:
Is there an actual (somewhat standardized) library on Hackage that meets my needs for such a generalized arrow typeclass?
Given such a library, is there any way to use such a GArrow
type class with a "generalized proc
" notation without having to cook up my own GHC extension? (With RebindableSyntax
perhaps?)
Note: Also, I'm fine with using quasiquotation for a generalized proc
notation. So perhaps it wouldn't be too difficult to modify something like this to suit my needs.
I've wondered about that before, too. But – proc
notation is so widely considered a silly oddball that there's probably not much interest in generalisation either (though I daresay this is what would make it actually useful!)
However, it's actually not necessary to have special syntax. The primary reference that must be named here is Conal Elliott's work on compiling lambda notation to bicartesian closed categories. Which I thought would have caught on in the Haskell community some time by now, but somehow hasn't. It is available as a GHC plugin, at any rate.
Even that isn't always needed. For some category combinators, you can just wrap a value that's universally quantified in the argument, and treat that as a pseudo-return-value. I call those Agent
in constrained-categories; not sure if that's usable for your application, at any rate several things you'd do with arrow-like categories can be done. (In constrained-categories, the tensor product is fixed to (,)
, however, so probably not what you want. Although, could you explain what tensor product you need?)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With