send package:polysemy

Execute an action of an effect. This is primarily used to create methods for actions of effects:
data FooBar m a where
Foo :: String -> m a -> FooBar m a
Bar :: FooBar m Int

foo :: Member FooBar r => String -> Sem r a -> Sem r a
foo s m = send (Foo s m)

bar :: Member FooBar r => Sem r Int
bar = send Bar
makeSem allows you to eliminate this boilerplate. @since TODO
Send uses of an effect to a Bundle containing that effect.
Embed an effect into a Sem, given an explicit proof that the effect exists in r. This is useful in conjunction with tryMembership, in order to conditionally make use of effects.
Given a ConLiftInfo, this will produce an action for it. It's arguments will come from any variables in scope that correspond to the cliEffArgs of the ConLiftInfo.