Hi all Sorry I've been slow replying: I'm not around much at the moment.
Thanks for all the responses. I did think, when I started playing with what I call eta and <$>, that I couldn't possibly be alone. Would it be good if we sought some more standardized presentation of this structure? In terms of *** 1 what to call the class and its methods: I have no particular attachment to any of the names I've used (also for stuff below) *** 2 what other bits and pieces we'd like to have also; in the Epigram source, I currently have the more general n-ary lifting operator fun, defined thus (again, I'm not attached to the names) > class Fun f => Funnel f s t | f s -> t, s t -> f, f t -> s where > fun :: s -> t > funnel :: f s -> t > instance Funnel f t u => Funnel f (s -> t) (f s -> u) where > fun g = funnel (eta g) > funnel fg fx = funnel (fg <$> fx) (defun base-funnel (data) (insert (concat "\n\n" "> instance Fun f => Funnel f " data " (f " data") where\n" "> fun = eta\n" "> funnel = id\n" ))) and then a Funnel instance for each base type, but I'd rather have > instance Fun f => Funnel f data (f data) where > fun = eta > funnel = id I believe it's that overlapping instances vs fundep problem... Also `ExtractableFunctor'... > infixl 9 <^> > class Functorial g where > (<^>) :: Fun f => (s -> f t) -> g s -> f (g t) ...and flattening... > infixr 5 <+> > class Monoidal x where > m0 :: x > (<+>) :: x -> x -> x > newtype K s t = K {unK :: s} deriving (Show,Eq) > instance Monoidal s => Fun (K s) where > eta _ = K m0 > K x <$> K y = K (x <+> y) > infixl 9 <!> > (<!>) :: (Functorial g,Monoidal s) => (x -> s) -> g x -> s > f <!> gx = unK ((K . f) <^> gx) *** 3 what extra syntax might be nice for work in this style, the way do-notation supports monads; one interesting question is how much of the lifting can be inferred silently, within the scope of a general hint that we're `working under f' I'm certainly interested in giving a serviceable presentation to this style of working: I use it all the time. Is it worth trying to get some sort of consensus? Cheers Conor _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe