Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.

Commit 93eba1d

Browse files
committed
📝 the practical takeaway.
1 parent c09e465 commit 93eba1d

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

semantic-core/src/Control/Monad/Module.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import Control.Effect.Carrier
1010

1111
-- | Modules over monads allow lifting of a monad’s product (i.e. 'Control.Monad.join') into another structure composed with the monad. A right-module @f m@ over a monad @m@ therefore allows one to extend @m@’s '>>=' operation to values of @f m@ using the '>>=*' operator.
1212
--
13+
-- In practical terms, this means that we can describe syntax which cannot itself bind or be substituted for variables, but which can be substituted inside when containing a substitutable expression monad. For example, we might not want to allow variables in a declaration context, but might still want to be able to substitute for e.g. globally-bound variables inside declarations; a 'RightModule' instance expresses this relationship nicely.
14+
--
1315
-- Note that we are calling this a right-module following Maciej Piróg, Nicolas Wu, & Jeremy Gibbons in _Modules Over Monads and their Algebras_; confusingly, other sources refer to this as a left-module.
1416
--
1517
-- Laws:

0 commit comments

Comments
 (0)