Answering my own question: François Pottier (guy who wrote that paper) has a bunch of talks and papers:Notable interest:Also Arthur Charguéraud:
On Tue, Jul 3, 2018 at 10:41 AM, Will Sargent <will.s...@gmail.com> wrote:Hi all,There's a couple of papers I've been reading as I'm digging into capabilities and effects.Notably in this slide deck, around slide 39: http://pauillac.inria.fr/~fpottier/slides/fpottier-2007-05-linear-bestiary.pdf> Capabilities and effects are two sides of the same coin. Capabilities are prescriptive, while effects are descriptive, but that is only a matter of presentation. (I do find the capability view somewhat more inspiring.The only other paper I can find on capabilities and effects specifically is this one:It seems like this is something I can sell much easier as a shift in perspective to the FP crowd -- does anyone know of any other papers or literature on the subject?Thanks,Will.
--
You received this message because you are subscribed to the Google Groups "friam" group.
To unsubscribe from this group and stop receiving emails from it, send an email to friam+un...@googlegroups.com.
To post to this group, send email to fr...@googlegroups.com.
Visit this group at https://groups.google.com/group/friam.
For more options, visit https://groups.google.com/d/optout.
> email to friam+unsubscribe@googlegroups.com.
> To post to this group, send email to fr...@googlegroups.com.
> Visit this group at https://groups.google.com/group/friam.
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "friam" group.
To unsubscribe from this group and stop receiving emails from it, send an email to friam+unsubscribe@googlegroups.com.
pure(Γ) ⊢ t : T1 ⇒T2
---------------------------- (A)
Γ ⊢ t : T1 →T2
pure(Γ) ⊢ v : T1 ⇒T2
---------------------------- (B)
Γ ⊢ v : T1 →T2
> email to friam+un...@googlegroups.com.
> To post to this group, send email to fr...@googlegroups.com.
> Visit this group at https://groups.google.com/group/friam.
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "friam" group.
To unsubscribe from this group and stop receiving emails from it, send an email to friam+un...@googlegroups.com.
Let's do a thought experiment. Instead of having a "magical" IO monad, let's have a magical capability CanIO. Then, instead of returning an IO[T], a function would instead return a CanIO => T. So this says "give me the capability to do IO and I return a T". Assume the CanIO capability is produced only by the runtime that executes a program. Then every program and every function that has side effects has to be of type CanIO => T, since there is no other way to get the capability. This is exactly the effect of an IO monad. However, instead of opaque IO components which are cobbled together with cumbersome monad operations, you now have regular functions that you can compose functionally! No more pains to express recursion, need to trampoline, and so on.
To avoid boilerplate, you want to make the capability parameter implicit and abstractable; that's exactly what Scala 3's implicit function types are about (to find out more: google for "Simplicitly, POPL 2018"). In the end, this gives you a system that can run exactly like a regular side-effecting system, except at each step the types tell you whether something belongs to the pure or the effectful half. Also, pure and effectful functions are composed in the same way, no more need to go monadic, no need to do monad transformer acrobatics to achieve any sort of composition.
To unsubscribe from this group and stop receiving emails from it, send an email to friam+unsubscribe@googlegroups.com.