X-Git-Url: http://lambda.jimpryor.net/git/gitweb.cgi?p=lambda.git;a=blobdiff_plain;f=advanced_topics%2Fmonads_in_category_theory.mdwn;fp=advanced_topics%2Fmonads_in_category_theory.mdwn;h=87c7886da074e8a99301dcc0ea5518005856eca3;hp=da99f402e880a48113a701eb28f52dc26cc2bed9;hb=ebed7bf68237f042849d0ebfeed8095a5f7d14a4;hpb=b7aef174959119fd62706cd966ca74859bbdf292 diff --git a/advanced_topics/monads_in_category_theory.mdwn b/advanced_topics/monads_in_category_theory.mdwn index da99f402..87c7886d 100644 --- a/advanced_topics/monads_in_category_theory.mdwn +++ b/advanced_topics/monads_in_category_theory.mdwn @@ -495,12 +495,12 @@ In functional programming, `unit` is sometimes called `return` and the monad law The base category C will have types as elements, and monadic functions as its morphisms. The source and target of a morphism will be the types of its argument and its result. (As always, there can be multiple distinct morphisms from the same source to the same target.) -A monad `M` will consist of a mapping from types `'t` to types `M('t)`, and a mapping from functions f:C1→C2 to functions M(f):M(C1)→M(C2). This is also known as liftM f for `M`, and is pronounced "function f lifted into the monad M." For example, where `M` is the list monad, `M` maps every type `'t` into the type `'t list`, and maps every function f:x→y into the function that maps `[x1,x2...]` to `[y1,y2,...]`. +A monad `M` will consist of a mapping from types `'t` to types `M('t)`, and a mapping from functions f:C1→C2 to functions M(f):M(C1)→M(C2). This is also known as liftM f for `M`, and is pronounced "function f lifted into the monad M." For example, where `M` is the List monad, `M` maps every type `'t` into the type `'t list`, and maps every function f:x→y into the function that maps `[x1,x2...]` to `[y1,y2,...]`. In functional programming, instead of working with natural transformations we work with "monadic values" and polymorphic functions "into the monad." -A "monadic value" is any member of a type `M('t)`, for any type `'t`. For example, any `int list` is a monadic value for the list monad. We can think of these monadic values as the result of applying some function `phi`, whose type is `F('t) -> M(F'('t))`. `'t` here is any collection of free type variables, and `F('t)` and `F'('t)` are types parameterized on `'t`. An example, with `M` being the list monad, `'t` being `('t1,'t2)`, `F('t1,'t2)` being `char * 't1 * 't2`, and `F'('t1,'t2)` being `int * 't1 * 't2`: +A "monadic value" is any member of a type `M('t)`, for any type `'t`. For example, any `int list` is a monadic value for the List monad. We can think of these monadic values as the result of applying some function `phi`, whose type is `F('t) -> M(F'('t))`. `'t` here is any collection of free type variables, and `F('t)` and `F'('t)` are types parameterized on `'t`. An example, with `M` being the List monad, `'t` being `('t1,'t2)`, `F('t1,'t2)` being `char * 't1 * 't2`, and `F'('t1,'t2)` being `int * 't1 * 't2`:
 	let phi = fun ((_:char), x, y) -> [(1,x,y),(2,x,y)]