X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=reader_monad_for_variable_binding.mdwn;h=b9fd816d439ee693e26d2ae9173264d856085651;hp=9ddddc8888847f02af94487e6edc47da1bc88e73;hb=7a822d410076318ea12be4e3cdb57e1b91218f42;hpb=3ef22cae11ec60126584496a6923b967510e70ad diff --git a/reader_monad_for_variable_binding.mdwn b/reader_monad_for_variable_binding.mdwn index 9ddddc88..b9fd816d 100644 --- a/reader_monad_for_variable_binding.mdwn +++ b/reader_monad_for_variable_binding.mdwn @@ -1,3 +1,5 @@ +[[!toc]] + Substitution versus Environment-based Semantics ----------------------------------------------- @@ -155,7 +157,10 @@ Here we'll use a different monad. It's called the **Reader monad**. We define it (* here's our bind operation; how does it work? *) let bind (u : 'a reader) (f: 'a -> 'b reader) : 'b reader = - fun (e : env) -> f (u e) e + (* this can be written more compactly, but having it spelled out + like this will be useful down the road *) + fun (e : env) -> let a = u e in let u' = f a in u' e + (* we also define two special-purpose operations on our reader-monad values *)