Arrow notation vs RebindableSyntax
Nicolas Frisby
nicolas.frisby at gmail.com
Thu Mar 13 21:36:54 UTC 2014
The 7.8-rc2 User Guide for rebindable syntax includes:
Arrow notation (see Section 7.16, "Arrow notation ") uses whatever arr,
> (>>>), first, app, (|||) and loop functions are in scope. But unlike the
> other constructs, the types of these functions must match the Prelude types
> very closely. Details are in flux; if you want to use this, ask!
I want to use this: my types for the functions apparently do not match the
Prelude types closely enough.
Whom should I ask about this?
Thanks very much.
-Nick
----- Further Context
If I do something similar with Monad and RebindableSyntax, it type-checks.
I'm doing some experimentation for work. I'd like to index my arrows as
follows.
(Disclaimer: I have not yet considered any of the laws; I do not currently
intend to support `app' and |||.)
infixr 1 >>>, <<<
type family (:*:) (i :: Maybe *) (j :: Maybe *) :: Maybe *
type instance Nothing :*: j = j
type instance i :*: Nothing = i
type instance Just i :*: Just j = Just (i,j)
returnA :: IArrow arr => arr Nothing a a
returnA = arr id
-- second, ***, and &&& can have the standard default definitions
class IArrow (arr :: Maybe * -> * -> * -> *) where
arr :: (b -> c) -> arr Nothing b c
(>>>) :: arr i a b -> arr j b c -> arr (i :*: j) a c
first :: arr i b c -> arr i (b,d) (c,d)
Unfortunately, the following does not type-check with -XArrows and
-XRebindableSyntax.
diagram :: IArrow arr => arr f x fx -> arr g x gx -> arr (f :*: g) x gx
diagram f g = proc x -> do
fx <- f -< x
gx <- g -< x
returnA -< gx
The error messages indicate that the type-checker is attempting to unify
the types of f, g, returnA, and the entire proc block.
However, the copy-and-pasted desugaring of that code *does* type-check (mutatis
mutandi).
This S data type is an example of an IArrow.
data S i a b where
SN :: ( a -> b ) -> S Nothing a b
SJ :: s -> ((a,s) -> (b,s)) -> S (Just s) a b
In terms of the S type, the objective of IArrow is to allow each "box in
the diagram" to have its own state.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20140313/69b04496/attachment.html>
More information about the ghc-devs
mailing list